了解Java字节码和JVM
-
05-07-2019 - |
题
在最近提出的一个问题中,我简单的回答强调了我对Java,JVM以及代码如何编译和运行的许多误解。这使我产生了将我的理解提升到较低水平的愿望。像汇编这样的低层次理解我没有问题字节码和JVM如何让我感到困惑。面向对象的代码如何在低级别上分解对我来说是丢失的。我想知道是否有人对如何了解JVM,字节码和Java的低级功能有任何建议。是否有任何实用程序允许您直接编写和运行字节码,因为我相信亲身体验某些东西是理解它的最佳方式?此外,我们将不胜感激地阅读有关该主题的建议。
编辑:次要问题。所以我有一个小问题,答案给了我一个有趣的想法来了解jvm,写一个非常简单的语言如brainf ** k或Ook的合理性只是用一种可读的语法(也许我甚至可以开发它)最终支持oo)编译成字节码是什么?这会是一次很好的学习经历吗?
其他提示
Apache BCEL 将允许您从字节码中分析和手工制作.class文件。
javap 将允许您拆解现有的.class文件。这对于敲击快速测试类来理解幕后真正发生的事情特别有用。
我通过阅读 ASM教程,并与图书馆本身混淆。
恕我直言,ASM优于BECL。
BCEL已被使用 成功地在几个项目中 作为编译器,优化器, 混淆器,代码生成器和 分析工具。 不幸的是那里 没有太大的发展 过去几年。随意地 帮忙或你可能想拥有一个 查看ASM项目 ObjectWeb的强> - http://jakarta.apache.org/bcel/
只有一个可靠的JVM理解源
Java®虚拟机规范Java SE 7版
http://docs.oracle.com/javase/规格/ JVM中/ SE7 / HTML / index.html中
Java虚拟机编程是本主题的好书。 (披露:我与作者合作。)
了解Java / JVM的架构:阅读Wikipedia,规范和源代码。
为了理解面向对象的代码是如何在低级别上完成的:尝试使用像C这样的低级语言来模拟继承/多态/封装等功能。
在C语言中,你可以通过例如函数指针和嵌套结构的组合来实现上述目的。