Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从第三方库中剥离绒毛?_Java_Optimization_Size - Fatal编程技术网

Java 如何从第三方库中剥离绒毛?

Java 如何从第三方库中剥离绒毛?,java,optimization,size,Java,Optimization,Size,这可能不是最佳实践,但有一些方法可以从第三方的jar文件中删除不受支持的类。查看我的类使用库的方式并进行某种覆盖率分析,然后抛出另一个jar,删除所有未触及的类 显然这有问题。具体来说,我提出的使用场景可能不会一直使用所有类 但是忽略这些问题,原则上可以做到吗?jar只是一个zip文件,所以我想你可以。如果你能找到源头,它会更干净。也许可以尝试分解类?再加上这个问题,这能提高性能吗?由于未使用的类不会进行JIT编译以缩短启动时间,或者java会在编译为字节码时自动检测到这一点,甚至不会处理未使用

这可能不是最佳实践,但有一些方法可以从第三方的jar文件中删除不受支持的类。查看我的类使用库的方式并进行某种覆盖率分析,然后抛出另一个jar,删除所有未触及的类

显然这有问题。具体来说,我提出的使用场景可能不会一直使用所有类


但是忽略这些问题,原则上可以做到吗?

jar只是一个zip文件,所以我想你可以。如果你能找到源头,它会更干净。也许可以尝试分解类?

再加上这个问题,这能提高性能吗?由于未使用的类不会进行JIT编译以缩短启动时间,或者java会在编译为字节码时自动检测到这一点,甚至不会处理未使用的代码?

在以前的工作中,我使用了一个java模糊器,在模糊代码的同时,还删除了未使用的类和方法。如果您正在执行“Class.byName”或任何其他类型的反射,则需要告诉模糊处理程序,因为它无法通过检查代码来判断反射调用了哪些类或方法


当然,问题是,您不知道第三方库的其他部分是否正在进行任何反射,因此删除“未使用”的类可能会导致在您尚未测试的模糊情况下出现问题。

这将是一个有趣的项目(有人已经完成了吗?)

我想你应该把你的jar作为一个起点,把库jar清理一下。它可以使用反射来确定jar直接引用的类,以及调用树中间接使用的类(这一点都不微不足道,但可行)。如果它在这两个地方遇到任何反射代码,它应该发出非常响亮的警告。

有一种方法

JarJar项目在AFAIR中实现了这一点。JarJar项目的第一个目标是允许在您自己的jar中嵌入第三方库,必要时更改包结构。这样做可以去掉不需要的类

请点击查看


这里有一个关于缩小JAR的链接:

Ant中有一个称为类文件集的工具。指定您知道需要的根类列表,然后类文件集递归地分析它们的代码以查找所有依赖项

或者,您可以开发一个好的测试套件,该套件可以测试您需要的所有功能,然后在测试覆盖率工具下运行测试。该工具将告诉您实际使用了哪些类(以及其中的语句)。这可以为您提供比静态分析更小的代码集。

我使用它。它不仅是一个优秀的模糊处理工具,而且还有一个代码收缩阶段,可以组合多个JAR,然后去掉任何未使用的类或类成员。它在收缩方面做得非常好