IT袋

当前位置:主页 > 经验教程 > 建站编程 >

JVM解释和编译指南

JVM解释和编译指南(3)

时间:2023-11-09 14:37:26 来源:IT袋 作者:马勇
导读:JVM解释和编译指南,-Xbatch 标志可以提高输出的可读性。如果解释和 JIT 同时发生, -Xbatch 可以帮助区分两者的输出。使用这些标志如下: $ java -Xbatch -XX:+PrintCompilation Demo 34

JVM解释和编译指南

-Xbatch标志可以提高输出的可读性。如果解释和 JIT 同时发生,-Xbatch可以帮助区分两者的输出。使用这些标志如下:

$ java -Xbatch  -XX:+PrintCompilation  Demo
         34        1        b  3           java.util.concurrent.ConcurrentHashMap::tabAt (22 bytes)
         35        2         n 0           jdk.internal.misc.Unsafe::getObjectVolatile (native)   
         35        3        b  3           java.lang.Object::

注意,上面命令的实际输出太长了,这里我只是截取了一部分。输出很长的原因是除了Demo程序的代码外,JDK 内部类的函数也被编译了。由于我的重点是Demo.java代码,我希望排除内部包的函数来简化输出。通过选项-XX:CompileCommandFile可以禁用内部类的 JIT:

$ java -Xbatch -XX:+PrintCompilation -XX:CompileCommandFile=hotspot_compiler Demo

在选项-XX:CompileCommandFile指定的文件hotspot_compiler中包含了要排除的包:

$ cat hotspot_compiler
quiet
exclude java/* *
exclude jdk/* *
exclude sun/* *

第一行的quiet告诉 JVM 不要输出任何关于被排除类的内容。用-XX:CompileThreshold将 JIT 阈值设置为 5。这意味着在解释 5 次之后,就会进行 JIT 编译:

$ java -Xbatch -XX:+PrintCompilation -XX:CompileCommandFile=hotspot_compiler \
-XX:CompileThreshold=5 Demo
        47      1       n 0     java.lang.invoke.MethodHandle::linkToStatic(LLLLLL)L (native)   
           (static)
        47      2       n 0     java.lang.invoke.MethodHandle::invokeBasic(LLLLL)L (native)   
        47      3       n 0     java.lang.invoke.MethodHandle::linkToSpecial(LLLLLLL)L (native)   
           (static)
        48      4       n 0     java.lang.invoke.MethodHandle::linkToStatic(L)I (native)   (static)
        48      5       n 0     java.lang.invoke.MethodHandle::invokeBasicI (native)   
        48      6       n 0     java.lang.invoke.MethodHandle::linkToSpecial(LL)I (native)   
           (static)
[...]
        1 iteration
        69   40         n 0     java.lang.invoke.MethodHandle::linkToStatic(ILIIL)I (native)   
           (static)
[...]
Square(i) = 1
        78   48         n 0     java.lang.invoke.MethodHandle::linkToStatic(ILIJL)I (native)   
(static)
        79   49         n 0     java.lang.invoke.MethodHandle::invokeBasic(ILIJ)I (native)   
[...]
        86   54         n 0     java.lang.invoke.MethodHandle::invokeBasic(J)L (native)   
        87   55         n 0     java.lang.invoke.MethodHandle::linkToSpecial(LJL)L (native)   
(static)
Time taken= 8962738
--------------------------------
2 iteration
Square(i) = 4
Time taken= 26759
--------------------------------
10 iteration
Square(i) = 100
Time taken= 26492
--------------------------------

好像输出结果跟只用解释时并没有什么区别。根据 Oracle 的文档,这是因为只有禁用

相关阅读

  • 找装修公司去哪个网站好 网上找装修公司的小窍门

    找装修公司去哪个网站好 网上找装修公司的小窍门

    对于许多网友来说找装修公司去哪个网站好和网上找装修公司的小窍门IT技巧方面的经验,下面IT袋为您详细介绍 现在的互联网大大改善了生活便捷度,装修网站作为专业化装修服务平台,为广

  • 如何实现一个IOC容器?

    如何实现一个IOC容器?

    小编为大家说一说如何实现一个IOC容器的相关经验,一起来了解了解吧。 概括来说分为四步: 配置文件配置包扫描路径 递归包扫描获取.class文件 反射、确定需要交给IOC管理的类 对需要注入的

  • 如何自建云服务器设置 搭建一个私有云平台

    如何自建云服务器设置 搭建一个私有云平台

    小编为网友们解答如何自建云服务器设置和搭建一个私有云平台方面的知识,具体详情如下: 如果选择云服务器的配置,总的来说要根据应用场景需求来。在云服务器的产品页面,会根据不同

  • 深入学习:MySQL中查询重复数据的有效方法

    深入学习:MySQL中查询重复数据的有效方法

    一篇方法教程,与您分享的IT小经验,接下来分享详细内容。 在进行数据库操作时,我们经常需要找出重复的数据。 在MySQL数据库中,有多种方法可以实现这个目标。 本文将向你展示如何在