我正在开发一个 Java 小程序,减小二进制代码的大小将使小程序打开速度更快,并改善用户体验。
我可以做些什么来减小类和/或 jar 文件的大小?我想确保我没有遗漏明显的技巧。
我知道在 C++ 世界中编译器选项例如剥离调试符号会产生巨大的差异,但我从未见过类似 Java 的东西。
最佳答案
查看此页面以获取有关如何使 jar 文件更小的一些提示 - http://wiki.java.net/bin/view/Games/4KGamesDesign .尽管有些技巧可能不适用,因为您不是在尝试绝对最小化,但您可以在不影响代码质量的情况下应用一些通用技巧。
但这里有一个总结:
将您的代码精简到一个类。每个类在 JAR 文件中添加一个条目的开销,以及一个全新的常量池和类列表。
尽量减少方法。每个方法都会在类文件中增加开销。您只需要一个 main()
方法,以及实现键盘和/或鼠标例程的方法。
不要使用全局变量。全局变量需要类中的特殊元数据来标识。然而,方法局部变量只是堆栈条目,使用时无需额外费用。
使用像 7Zip 或 KZip 这样的好压缩器来创建你的 JAR 文件。 JAR 实用程序主要是为正确性而不是压缩率而设计的。
使用 ProGuard、JoGa 或 JShrink 等混淆器来优化类的大小。
类文件名使用单个字符。这在内部减小了它的大小,减少了 Zip 程序存储的信息量,并减小了 list 的大小。
尽可能少地引用类。您引用的每个类都会添加完整的包和类名,以及您正在调用的方法签名。
冗余(例如对所有方法、类和字段使用相同的名称)提高了压缩率。
私有(private)和最终的方法可以被类优化器内联。
使用 String.valueOf()
方法将原语转换为字符串。例如,""+number
扩展为:new StringBuffer?().append("").append(number).toString()
浪费了大量空间在新的类和方法引用中。
源代码中使用的静态字符串、 float 和整数存储在常量池中。因此,您可以越多地重用静态值, 你的类(class)会变小。
您可以自由地使用静态最终变量作为常量。这将使您的代码更具可读性,ProGuard 会对此进行优化,因此不会产生额外的开销。
关于java - 我该怎么做才能使 jar /类更小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1790026/