我可以做些什么来使jar /类变小?

ama*_*ion 13 java size applet jar java-web-start

我正在开发一个Java Applet,减少二进制代码的大小将使applet更快地打开并改善用户体验.

有什么办法可以减少类和/或jar文件的大小吗?我想确定我没有错过任何明显的技巧.

我知道在C++世界中,例如剥离调试符号的编译器选项可以产生巨大的差异,但我从来没有见过类似Java的东西.

Jon*_*eet 11

您可以使用

javac -g:none
Run Code Online (Sandbox Code Playgroud)

删除调试信息 - 我不知道它可能会有多大差异.

您是否确信下载时间是瓶颈?小程序有多大?除非它是巨大的,否则我怀疑它的大小在下载后会有很大的不同.


Chi*_*hii 11

查看此页面,了解有关如何使jar文件变小的一些提示 - http://wiki.java.net/bin/view/Games/4KGamesDesign.即使有些可能不适用,因为您没有尝试绝对最小化,但有一些常规提示可以应用而不会影响代码质量.

但总结如下:

将代码保持在一个级别.每个类都会增加JAR文件中条目的开销,以及全新的常量池和类列表.

保持您的方法最小化.每种方法都会增加类文件的开销.您需要的只是一种main()实现键盘和/或鼠标例程的方法和方法.

不要使用全局变量.全局变量需要类中的特殊元数据来识别.但是,方法局部变量只是堆栈条目,使用时不需要额外费用.

使用像7Zip或KZip这样的好压缩器来创建JAR文件.JAR实用程序主要是为了正确而非压缩比而设计的.

使用像ProGuard,JoGa或JShrink这样的混淆器来优化班级的大小.

对类文件名使用单个字符.这会在内部减小其大小,减少Zip程序存储的信息量,并减小清单的大小.

引用尽可能少的类.您引用的每个类都会添加完整的包和类名,以及您正在调用的方法签名.

冗余(例如对所有方法,类和字段使用相同的名称)可提高压缩率.

private和final的方法可以由类优化器内联.

使用该String.valueOf()方法将基元转换为字符串.例如,""+number扩展为:new StringBuffer?().append("").append(number).toString()在新类和方法引用中浪费大量空间.

源代码中使用的静态字符串,浮点数和整数存储在常量池中.因此,您可以重用静态值越多,您的班级就越小.

您可以自由地使用常量的静态最终变量.这将使您的代码更具可读性,ProGuard将对此进行优化,因此不会产生额外开销.

  • 这是一个非常详细的事情列表*不是*要做的,甚至不是为了文件大小 - 除非它仅用于演示用途.:) (4认同)
  • 是否可以在构建过程中进行混淆处理值得研究。但是我绝对不想放弃代码的可读性以节省一些字节。 (2认同)

mik*_*iku 6

Proguard是一个免费的Java类文件收缩器,优化器,混淆器和预验证器.它检测并删除未使用的类,字段,方法和属性.它优化字节码并删除未使用的指令.

关于proguard网站的报告显示了减少的例子,从19%到90%不等.