Java 是否删除LineNumberTable和筛选器LocalVariableTable?

Java 是否删除LineNumberTable和筛选器LocalVariableTable?,java,bytecode,java-bytecode-asm,Java,Bytecode,Java Bytecode Asm,一些框架使用字节码中的调试信息读取方法参数名称。但是调试信息包含更多信息 为了最小化类大小,我们可以删除所有LineNumberTable数据,并通过删除除方法参数名称以外的所有内容来过滤LocalVariableTable。或者只是过滤变量,留下行号,所以stracktraces保留行号 在我测试之前,有人知道这是否可行吗?或者一个在我写我自己的之前可以做到这一点的工具: 塔克斯 编辑以澄清我的问题:以解释的方式修改库jar(例如剥离一些LocalVariableTable数据)是否可以在ja

一些框架使用字节码中的调试信息读取方法参数名称。但是调试信息包含更多信息

为了最小化类大小,我们可以删除所有LineNumberTable数据,并通过删除除方法参数名称以外的所有内容来过滤LocalVariableTable。或者只是过滤变量,留下行号,所以stracktraces保留行号

在我测试之前,有人知道这是否可行吗?或者一个在我写我自己的之前可以做到这一点的工具:

塔克斯

编辑以澄清我的问题:以解释的方式修改库jar(例如剥离一些LocalVariableTable数据)是否可以在java生态系统中工作,从android到应用服务器-jboss、websphere

编辑2我已经为条带化创建了一个快速且脏的工具,下面是一些结果

original jar size: 1,288,625
stripped just non-method local variables: 1,272,095  (99%)
removed and LineNumberTable: 1,192,492 (93%)
如果我的代码正确,从这些结果;我们可以得出结论,过滤LocalVariableTable无助于最小化;唯一有意义的是剥离LineNumberTable,但我们将在堆栈跟踪中丢失数字

现在我们来看看jar是否可以只删除LineNumberTable。

只需使用-g:none选项编译即可删除此数据

为了进一步减小类大小,可以使用-target 1.5在不使用堆栈映射的情况下进行编译。不幸的是,如果您这样做的话,Java 7编译器要求您也使用-source 1.5进行编译,没有明显的原因


当然,这将删除所有调试信息。如果要保留某些信息以供框架使用,详细信息将取决于所讨论的框架。

我知道g:none,我不想删除所有数据。如前所述,我询问的是部分调试数据删除;这是我以前从未遇到过的问题。如果你想让它与特定的框架一起工作,你必须指定框架,这样我才能看到它正在查看的信息。抱歉,我不够清楚,请参阅我的编辑。我想知道这样的库,以解释的方式修改后,是否会像以前一样在java世界中工作。我想知道加载带有局部LocalVariableTable的类是否有问题。我在这里制作了这个工具: