问题标签 [javap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 我们可以使用 javap dissembler 创建 .java 文件吗
我们可以使用 jdk 的 javap 工具从 .class 文件重新生成 .java 文件吗?
我使用javap classsfile
了命令,它只是打印带有数据成员和成员函数声明的 .java 文件。
如果不是,那么完成它的适当方法是什么......
jvm - javac 也内联吗?
我在玩 javap 和一些非常简单的代码,这引发了一个 - 希望是简单的 - 问题。
这里首先是代码:
现在我编译了代码并查看了输出(暂时省略 -verbose)。
现在这一切都说得通了,我理解了不同的字节码,但我想到的问题是:
- 我看到在 invokestatic 调用中提到了“m1”和“m2”,所以它们以某种方式被调用,但我在 javap 调用中没有看到它们的实际字节码输出!
- 现在,他们是内联还是不显示?如果是这样,为什么?
同样,这个问题只是对 javac 如何在内部处理这些东西感兴趣。谢谢!
java - javap 命令的输出
我使用命令检查了我的类文件javap
,我无法理解以下部分
编辑: 下面是相应的java代码。
我不明白上述类文件中的以下内容:
- 堆栈=4,本地=1,args_size=1
- LineNumberTable: 部分
java - javap输出中缺少指令号
每次我尝试理解编译后的 Java 文件的反汇编代码时,我都想知道为什么缺少一些指令号。
一个小例子:
我反汇编 ( $ javap -c HelloWorld
) 一个简单的 HelloWorld 类。这是输出:
如您所见,构造函数中的指令 3 和 4 以及 main 方法中的一些指令缺失。
有人知道为什么缺少这些指令编号吗?是否有一些由于某种原因隐藏的字节码指令?
java - 编译器优化字节码案例
我曾经在这里评论过。
我建议应该用a.length / 2
. 一个人告诉他,他相信编译器无论如何都会增强它
所以我尝试了。
当我打印这些课程时,javap
我得到了。
Loop1.javap.txt
Loop2.javap.txt
问题是我无法读取字节码。
a.length /2
编译器实际上是否使用 Loop1.java优化了该部分?
java - 类文件常量池(javap)中的方法签名和描述符
我试图找出类文件中常量池部分下的以下两个条目:
条目 (1) -> (I)I 是否表示函数的开始,条目 (2) -> I 是否表示函数的结束。
这个编译器是特定的还是可能因一个编译器而异?
Lambda 函数也有类似的问题。
抱歉,在 JLS 文档上找不到任何内容。
谢谢
scala - Unable to use scala's repl :javap to look at trait companion object
I am using the :javap command in the scala repl and was trying to look at the traits companion object, but I couldn't seem to find out how. Here is what I do from command line.
I try the same in the repl and get the following (using Bar since Foo will be compiled in ., so repl will pick it up)
Scala version of repl
Running on a mac
EDIT: Just downloaded scala 2.11 and ran the repl there. It seems that :javap is able to pick up the class, but its running :javap -v rather than :javap. Switching to :javap -p makes this output the same as 2.10
java - var arg 和数组之间的区别
假设我有一个类似的代码
当我做javap HelloWorld
因此,根据类文件 method1 和 method2 采用相同的数组参数。那么为什么他们可以接受的输入不同呢?
像 method1 不能接受简单的字符串输入,而 var arg 可以接受变量字符串输入以及数组?
java - 为什么 javac 会为两个看似非常相似的结构生成不同的字节码?
考虑非常简单的人为示例代码:
javap 产生这个:
为什么编译器会为非常相似的字段
a
和b
. 两者都是用常量字面量初始化的整数类型。因为
a
它通过从池中获取常量iconst_3
,然后将其存储在变量中,istore_1
而对于 b 它使用完全不同的机制(bipush
和 的组合istore
)。
java - 为什么对父构造函数的调用不是编译器为内部类生成的构造函数中的第一次调用?
考虑以下Test
类来演示 Java 中的内部类行为。主要代码在run
方法中。休息只是管道代码。
我只是在隐藏Sub
构造函数的 javap 输出下方打印:
通常,编译器会确保子类构造函数首先调用超类构造函数,然后再继续初始化它自己的字段。这有助于正确构造对象,但在编译器为内部类生成的构造函数的情况下,我发现规范行为存在偏差。为什么这样?它是由 JLS 指定的吗?
PS:我知道内部类包含对外部类的隐藏引用,并且在上面的 javap 输出中设置了该引用。但问题是为什么它是在调用超级构造函数之前设置的。我错过了什么?