"有比Java字节码更好的方法来描述语义"?

 mobiledu2502876347 发布于 2023-02-04 13:56

Cliff Click在他的演讲中,"JVM就是这样吗?","有更好的方法来描述语义而不是Java字节码":http://www.youtube.com/watch?v = uL2D3qzHtqY&t = 8m55s

为什么?Java字节码有什么问题?有哪些替代方案?

1 个回答
  • 字节码已经失去了很多语义,这就是问题所在.它是一种非结构化的机器代码.作为一个例子,见证了Java反编译器的巨大复杂性:它基本上是Java的CSI团队,从分散在字节码周围的信息碎片中精心地重建源代码.

    由于现代JVM除了作为程序语义的描述之外没有太多用于字节码,因此它已经失去了它的原始目的,这是一种相对快速解释的格式,介于Java和本机之间的描述级别中.机器代码.

    与原始源代码相比,JIT编译器实际上更难以优化字节码,因为它希望尽可能多地了解一段代码背后的意图.考虑一下这段代码:

    int i = 0;
    String s = "";
    for (Integer num : nums) { 
      s += num;
      if (++i < ints.size()) s += ", ";
    }
    

    代码做了什么?经过一些分析并确认了一些猜想后,结果发现它从整数列表中汇编了一个逗号分隔的字符串.但是,要优化的内容有很多:

      使用不可变String类型通过循环保存临时值;

      维护一个单独的索引变量,i它是隐含的一个索引变量的副本Iterator;

      i每次都要检查列表大小,即使很明显这只会在最后一次迭代时才会出现.

    JIT编译器将定期执行循环特化优化:它将为最后一个循环步骤发出单独的代码,从而完全消除重复if检查.它也可能意识到临时字符串没有转义并自动用StringBuilder基于它的整个成语替换.

    为了实现所有这一切,很明显编译器必须对正在发生的事情有一个非常全面的高级理解,使用源代码比生成的字节码更容易实现.

    编程语言的现代趋势是将源代码本身作为JIT的入口点,或者与源代码非常相似的东西,如AST.

    2023-02-04 13:58 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有