可以使用一些标志来提供有关已编译方法的日志信息。关于没有编译的方法以及为什么没有编译的信息在哪里?能够看到hotspot编译器是如何做出决定的,以及它不编译某些方法的原因,这将使我更好地理解JVM,并允许我编写更好的代码,并可能优化我的一些方法。有人对这个话题有什么想法吗?
发布于 2010-06-29 10:05:45
根据:http://blog.headius.com/2009/01/my-favorite-hotspot-jvm-flags.html
Hotspot打印出-XX:+PrintCompilation决定进行即时编译的每个
方法的名称。该列表最初通常会显示一组核心Java类方法,然后转向应用程序中的方法。
我个人认为这会占用你很多时间。如果您使用最佳实践和一些常识编写代码,然后如果性能有问题,请进行配置文件。你应该做得很好。
发布于 2016-04-13 20:16:13
答案是,如果方法没有被执行足够多的次数,它们可能不会被编译。本机代码缓存是有限的,因此编译每个方法都是适得其反的;您最终可能会得到许多已编译的方法,但随后重要的方法不再适合缓存大小。
确切的数字因版本而异,但是如果使用-XX:+PrintFlagsFinal运行Java,那么您将看到所有可以调整的设置,包括Tier3CompileThreshold (值为2000)和Tier4CompileThreshold (值为15000)。因此,如果您不调用您的方法超过2000次,它将使用解释器来遍历它。
如果您想要在JIT条件下执行性能分析,那么您需要执行大量调用方法的循环才能看到好处,或者使用诸如JMH之类的性能分析工具来正确地执行性能分析。
https://stackoverflow.com/questions/3133037
复制相似问题