9得票4回答
字节码转换:将记录类转换为可变类

我刚刚发现EBean以一种让我感到奇怪的方式对记录类文件进行字节码转换,我想知道这是否在JVM角度上是合法的,并寻求答案。 显然,可以有一个类文件,其中类扩展了java.lang.Record并定义了记录组件属性(所以它像javac创建的那样是一个“记录”),但具有以下额外的“功能”,而jav...

14得票1回答
Kotlin 内联扩展属性

我知道 inline 关键字的意思是避免调用函数时产生开销。但我不确定将一个扩展属性标记为 inline 会起什么作用? 假设我们有两个扩展属性,分别命名为 foo 和另一个标记为 inline 的属性 barval Any.foo : Long get() = Date().tim...

7得票3回答
为什么Java字节码中的“存储”通常紧随其后是“加载”?

当我阅读某些小Java函数的JVM字节码时,我发现在操作数栈上计算新的局部变量时,假设它将被存储在局部变量表中,但通常会立即加载到操作数栈中(仅在字节码的字面意义上)。我不太理解这个操作,这是一个不必要的操作吗?

25得票2回答
空或空Lambda作为默认值

哪个解决方案更好?使用可空lambda还是将空lambda作为默认参数传递?Kotlin是否会优化空的lambda,或者创建一个什么也不做的新实例? ``` class Test1(val action: () -> Unit = {}) ``` 不幸的是,我不理解生成的字节码。 让我们来...

7得票1回答
为什么没有ICMP指令?

如你所知,我们有大量的操作码用于比较不同类型的原始值: LCMP FCMPL FCMPG DCMPL DCMPG IFEQ IFNE IFLT IFGE IFGT IFLE IF_ICMPEQ IF_ICMPNE IF_ICMPLT IF_ICMPGE IF_ICMPGT IF_ICMPLE...

9得票1回答
如何使用ByteBuddy创建动态代理

在Java中,使用InvocationHandler的实现可以创建动态代理。尽管JVM进行了优化,但是使用反射调用方法总会有一些开销。 为了解决这个问题,我尝试使用ByteBuddy在运行时创建代理类,但是文档在这方面看起来不够清晰。 我该如何创建一个MethodCallProxy以将方法...

16得票1回答
IntelliJIDEA中的Java字节码反编译器(针对Scala)

我正在使用Intellij IDEA Ultimate Edition。浏览由Java源代码编译的.class文件很容易:我只需双击.class文件,IDEA就会对其进行反编译。 然而,对于从Scala源代码编译的.class文件,它不起作用。看起来IDEA只是引用了scala源文件。 我...

11得票3回答
Java字节码中的if条件取反

考虑一个简单的例子private static String isPositive(int val) { if (val > 0) { return "yes"; } else { return "no"; } } 这里很简单:如果...

128得票11回答
读取和显示Java .class版本的工具

你们中是否有人知道一种工具,可以搜索.class文件并显示它们的编译版本? 我知道你可以在十六进制编辑器中逐个查看它们,但我有很多要检查的class文件(我的巨型应用程序中有某些东西以某种原因编译为Java6)。

42得票3回答
动态Java字节码操作框架比较

有一些针对动态字节码生成、操作和编织的框架,比如BCEL、CGLIB、javassist、ASM和MPS。我想学习它们,但由于时间有限,我希望看到一种比较图表,以便了解它们之间的优缺点,并解释其原因。 在这里(指Stack Overflow),我发现很多类似的问题,答案通常是“你可以使用cg...