【问题标题】:Learning about Java bytecode and the JVM学习 Java 字节码和 JVM
【发布时间】:2010-11-15 11:32:20
【问题描述】:

在最近提出的一个问题中,我头脑简单的回答突出了我对 Java、JVM 以及代码如何编译和运行的许多误解。这使我产生了一种将我的理解降低到较低水平的愿望。我对像汇编这样的低级理解没有任何问题,但字节码和 JVM 让我感到困惑。面向对象的代码是如何在低层次上被分解的,我对此一无所知。我想知道是否有人对如何了解 JVM、字节码和 Java 的低级功能有任何建议。是否有任何实用程序可以让您直接编写和运行字节码,因为我相信亲身体验某事是加深对它的理解的最佳方式?此外,我们将不胜感激有关此主题的阅读建议。

编辑:次要问题。所以我有一个子问题,答案给了我一个有趣的想法来了解 jvm,仅以可读的语法编写像 Brainf**k 或 Ook 这样非常简单的语言的合理性是什么(也许我什至可以开发它最终支持oo)编译成字节码是?这会是一次很好的学习经历吗?

【问题讨论】:

  • +1 用于给brainf**k 属性'simple' ;-)
  • 我猜“简单”的意思是小复杂,而不是易用性;)

标签: java jvm bytecode low-level-code


【解决方案1】:

推荐阅读:the JVM spec.

您可能还想使用BCEL - 周围还有其他用于处理字节码的库,但这可能是最著名的一个。

【讨论】:

  • 我什至不知道这样的规范存在。这真的很有帮助。
【解决方案2】:

Apache BCEL 将允许您从字节码分析和手工制作 .class 文件。

javap 将允许您反汇编现有的 .class 文件。它对于打开快速测试课程以了解幕后实际情况特别有用。

【讨论】:

    【解决方案3】:

    我是通过阅读the ASM tutorial 和对图书馆本身胡乱学习的。

    恕我直言,ASM 比 BECL 更好。

    BCEL 已被使用 在多个项目中取得成功,例如 作为编译器、优化器、 混淆器、代码生成器和 分析工具。 不幸的是 没有太多的发展 在过去的几年里。随意地 帮忙或您可能想要一个 查看 ASM 项目 对象网。 - http://jakarta.apache.org/bcel/

    【讨论】:

    【解决方案4】:

    理解JVM的可靠来源只有一个

    Java® 虚拟机规范 Java SE 7 版

    http://docs.oracle.com/javase/specs/jvms/se7/html/index.html

    【讨论】:

      【解决方案5】:

      Programming for the Java Virtual Machine 是本主题的好书。 (披露:我与作者合作。)

      【讨论】:

        【解决方案6】:

        要了解 Java/JVM 的架构:请阅读 Wikipedia、规范和源代码。

        要了解如何在低级别上完成面向对象的代码:尝试在 C 等低级别语言中模拟继承/多态性/封装等功能。

        在 C 语言中,您可以通过例如函数指针和嵌套结构的组合来实现上述目标。

        【讨论】:

        • 我真的很喜欢第二个建议。我想我可能不得不尝试想出一种优雅的方式来做到这一点。我知道一些关于多态性和继承的非常复杂的技术,但它们都是我想出的非常低效的技术,甚至可能算不上模拟这些特性。
        • 添加了有关在 C 中执行此操作的更多信息。如果您对语言和指针的工作方式有很好的理解,实际上并不难。
        • @MikeMcQuaid:在 C 中实现闭包怎么样?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-02
        • 1970-01-01
        • 1970-01-01
        • 2016-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多