Tag: 字节码

为什么lambda转换需要生成静态方法?

Lambda转换是一个两步过程, 一个是 :将lambda放入同一个类中的静态方法中。 public class Main { public static void main(String[] args) { Runnable r = () -> System.out.println(“Hello”); System.out.println(Arrays.asList(Main.class.getDeclaredMethods())); } } [ private static void Main.lambda $ main $ 0() ,public static void Main.main(java.lang.String [])] 二 :生成实现function接口的类。 System.out.println(“A class has been generated: ” + r.getClass()); System.out.println(“That implements a Functional Interface: ” + Arrays.asList(r.getClass().getInterfaces())); 已生成一个类:类Main […]

Java:在同一个JVM中从运行时获取类的字节码

相关: 有没有办法在运行时获取类的字节码? 我正在为Clojure增加耐久性,我终于到了准备添加function的地步。 在Clojure中,函数通过调用方法(以及其他方式)被字节编译为类。 通过这种方式,function是一流的。 为了使这些持久,我需要序列化和反序列化这些类。 如何在不访问.class文件的情况下获取类的字节码? 如果我弄错了,请纠正我,但使用代理需要生成一个单独的VM,代理连接到第一个VM。 我需要从同一个VM做到这一点。 使用Serializable来设置和获取Class对象是不够的。 在反序列化时,我需要加载该类,并且在后续VM实例上,可能存在类名冲突。 我需要修改字节码,以便在反序列化/类加载时将类重命名为唯一的。

默认变量的值与初始化的默认值

我们都知道,根据JLS7第4.12.5节,每个实例变量都使用默认值进行初始化。 例如(1): public class Test { private Integer a; // == null private int b; // == 0 private boolean c; // == false } 但我一直认为,这样的类实现(2): public class Test { private Integer a = null; private int b = 0; private boolean c = false; } 绝对等于例子(1)。 我预计,复杂的Java编译器会发现(2)中的所有这些初始化值都是冗余的并且省略了它们。 但突然之间,这两个类我们有两个不同的字节码。 例如(1): 0: aload_0 1: invokespecial #1; […]

使用java运行jython字节码

看起来我错过了一些东西。 当使用Jython在Java中运行我的Python代码时,会生成Java字节码文件(test.py – > test@py.class)。 我可以直接使用java运行这些类吗? 换句话说,我想这样做: $ java test@py [additional cp args] 工作。 目的:编写Python代码而不必放弃源代码。

为什么JSR / RET不推荐使用Java字节码?

有谁知道为什么在Java 6中不推荐使用JSR / RET字节码对? 我在网上发现的唯一有意义的解释是,他们通过运行时进行代码分析更难以执行。 有谁知道另一个原因?

如何在JVM中validation字节码?

如何在JVM中validation字节码?

Java字节码Visualizer

什么可以帮助我帮助用Java编写高度紧凑(最少字节代码计数)的程序。 可能我在看: 一个工具,告诉我一个Class或一个方法生成多少字节代码。 可视化字节代码。 该工具可以告诉我哪些区域需要在字节码计数或cpu周期方面进行优化。 字节代码表还有助于指示Java中存在哪些字节代码及其各种属性。 任何可以帮助我实现这一目标的现有工具?

在Java 8中转换lambdas

Java 8似乎生成了表示lambda表达式的类。 例如,代码: Runnable r = app::doStuff; 大致表现为: // $FF: synthetic class final class App$$Lambda$1 implements Runnable { private final App arg$1; private App$$Lambda$1(App var1) { this.arg$1 = var1; } private static Runnable get$Lambda(App var0) { return new App$$Lambda$1(var0); } public void run() { this.arg$1.doStuff(); } } 据我了解,代码是在运行时生成的。 现在,假设有人想将代码注入上述类的run方法中。 到目前为止,实验产生了NoClassDefFound和VerifyError的混合: java.lang.NoClassDefFoundError: App$$Lambda$2 at App$$Lambda$2/1329552164.run(Unknown Source) […]

从C Source到Java Bytecode?

我正在寻找一种将C源代码编译成高性能Java字节码的方法。 我已成功使用NestedVM ,但对于我正在处理的项目而言 ,性能损失是不可接受的。 我还看到了针对这个问题的各种开源项目以及一些商业产品。 这个SO问题涉及将非Java转换为Java源代码的一般问题,但我只想从C转换为Java字节码。 将C源代码编译成高性能,纯Java字节码的最佳方法是什么?

编译为java字节码(不使用Java)

我的编译器类正在创建一个我们打算编译为Java Bytecode的语言。 我们已经取得了很多进展,并且正在接近代码生成的时间。 我们在查找有关如何从编译器创建.class文件的信息时遇到问题。 你有什么资源可以给我们一些帮助吗? 我们已经有很多关于指令集的文档,但需要有关如何直接填写类文件/ hex的写入的信息。 我们不需要有关反编译.class文件的信息或建议。 即使是从头开始编写.class文件的简单示例也是非常好的。 JVM规范不是我们追求的。 我们真正需要的是一个例子或演练。