39

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

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

4

6 回答 6

31

推荐阅读:JVM 规范

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

于 2009-07-30T14:53:30.580 回答
13

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

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

于 2009-07-30T14:53:41.173 回答
5

我通过阅读ASM 教程和对库本身进行了学习。

恕我直言,ASM 比 BECL 更好。

BCEL 已经在多个项目中成功使用,例如编译器、优化器、混淆器、代码生成器和分析工具。不幸的是,在过去的几年里并没有太大的发展。随时提供帮助,或者您可能想查看 objectweb 上的 ASM 项目。 - http://jakarta.apache.org/bcel/

于 2009-07-30T15:44:55.923 回答
3

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

Java® 虚拟机规范 Java SE 7 版

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

于 2014-01-22T10:07:13.807 回答
2

《Java 虚拟机编程》是本主题的好书。(披露:我与作者合作。)

于 2009-07-30T15:27:01.070 回答
1

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

为了理解面向对象的代码是如何在低层次上完成的:尝试在像 C 这样的低层次语言中模拟继承/多态性/封装等特性。

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

于 2009-07-30T14:55:49.390 回答