java - 我该怎么做才能使 jar /类更小?

标签 java jar applet size java-web-start

我正在开发一个 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/

相关文章:

Java - LinkedBlockingQueue问题

java - NoClassDefFoundError - 无法初始化类...?

java - 如何在 IDEA 中设置 Java 小程序的工作目录?

java - 在客户端/浏览器上哪个版本的 Java 是现实的?

java - 如何使用离散傅里叶变换在频域中的图像上实现低通滤波器?

java - 当只需要指定一个子类时,如何利用多态来设计?

java - 终止无响应的线程

java - 捕获并修改从外部 JAR 发送的 stderr

java - 有没有办法以编程方式获取当前 java mail api 的版本?

java - A类主菜单扩展Applet