代码之家  ›  专栏  ›  技术社区  ›  grom

虚拟机优化

  •  9
  • grom  · 技术社区  · 17 年前

    我在胡闹 a toy interpreter in Java 我正在考虑编写一个简单的编译器,可以为Java虚拟机生成字节码。这让我想到,针对虚拟机(如JVM和CLI)的编译器需要做多少优化?

    Just-In-Time(JIT)编译器是否经常进行折叠、窥视孔优化等操作?

    7 回复  |  直到 13 年前
        1
  •  4
  •   Dinah SLaks    15 年前

    我只想添加两个链接来解释 Java's bytecode 很好,还有一些 various optimization 运行时的。

        2
  •  3
  •   DrPizza    17 年前

    在大多数情况下,优化字节码可能是一种矛盾。

    我不认为那是真的。提升循环不变量和传播常量之类的优化永远不会受到伤害,即使JVM足够聪明,可以自己完成这些优化,只需简单地使代码工作更少。

        3
  •  3
  •   Mike Tunnicliffe    17 年前

    优化是使JVM作为长时间运行的应用程序的环境而可行的原因,您可以打赌Sun、IBM和朋友们正在尽最大努力确保他们能够以尽可能高效的方式优化您的字节码和JIT编译的代码。

    这么说,如果你认为你可以预先优化你的字节码,那么它可能不会有太大的危害。

    然而,值得注意的是,当JVMs只使用Java编译器倾向于构造的字节码时,它可以倾向于更好地执行(而不是崩溃)。当字节码的排列正确但与javac所产生的不同时,错过优化甚至是JVM崩溃都是未知的。希望这类事情在过去更为常见,但可能是值得注意的事情。

        4
  •  2
  •   Tim Cooper    13 年前

    像proguard这样的模糊器将为您在字节码上执行许多静态优化。

        5
  •  1
  •   Nathaniel Flath    16 年前

    Hotspot编译器将在运行时比编译时更好地优化代码,毕竟它有更多的信息要处理。唯一应该优化字节码而不仅仅是算法的时间是针对移动设备(如BlackBerry)的时候,因为该平台的JVM不够强大,无法在运行时优化代码,只能执行字节码。

        6
  •  0
  •   Tim Cooper    13 年前

    在大多数情况下,优化字节码可能是一种矛盾修饰。除非你控制了虚拟机,否则你不知道它做了什么来加速代码执行,如果有的话。为了生成优化的代码,编译器需要知道VM的细节。

        7
  •  0
  •   Tim Cooper    13 年前

    Aseraphim注意:

    在某些有限的情况下,优化非嵌入式应用程序的字节码也很有用:

    1. 当通过网络交付代码时,例如对于WebStart应用程序,为了最小化可交付/缓存的大小,并且因为您不一定知道客户端的功能/速度。

    2. 对于您知道性能关键并且在启动时使用的代码,在Hotspot有时间收集任何统计信息之前。

    同样,一个好的乐观者/模糊者所执行的转换可能非常有用。