java - 了解 Java 字节码

标签 java bytecode

我经常被一个没有源代码的 java 类文件困住,我试图理解我手头的问题。

请注意,反编译器很有用,但在所有情况下都不够...

我有两个问题

  1. 有什么工具可以查看java字节码(最好从linux命令行下获取)
  2. 熟悉 java 字节码语法有哪些好的引用资料

最佳答案

与其直接查看 Java 字节码,这需要熟悉 Java 虚拟机及其操作,不如尝试使用 Java 反编译实用程序。反编译器将尝试从指定的 class 文件创建 java 源文件。

How do I “decompile” Java class files?是一个相关的问题,它可以帮助您了解如何反编译 Java class 文件。

也就是说,可以使用 JDK 中的 javap 命令来反汇编 Java class 文件。 javap 的输出将是 class 文件中包含的 Java 字节码。但请注意,字节码与 Java 源代码完全不同。

了解 Java 字节码和 Java 虚拟机本身的确切来源是 The Java Virtual Machine Specification, Second Edition .特别是,Chapter 6: The Java Virtual Machine Instruction Set有所有字节码指令的索引。

关于java - 了解 Java 字节码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1552308/

相关文章:

java - 为什么我的 libVLC 程序在尝试绑定(bind)捕获设备时会死锁?

java - @JacksonXmlProperty(isAttribute = true) 使用 Jackson XmlMapper 附加唯一 id

java - 复制 JPA 中的实体

java - 如何在运行时将 JSR-045 SMAP 信息添加到 Java 堆栈跟踪?

java - 什么是 CONSTANT_MethodHandle、CONSTANT_MethodType 和 CONSTANT_InvokeDynamic?

java - 如何让优先级队列自行重新排序

java - if(scanner.nextInt){} 被忽略 (java)

jvm - 我很好奇 ldc 在 JVM 中的缩写是什么?

java - 乘法/移位优化是否应该在 Java 字节码中可见

java - 任何人都可以使用任何 Java 应用程序的代码吗?