桌面应用程序的jar文件是否应该进行压缩?

5
只是想知道,对于将与桌面应用程序一起发货的jar文件是否压缩通常是一个好主意(没有访问jars的网络),还是解压缩将比文件io产生更大的影响。

编辑:感谢迄今为止的答案,并为此有点不清楚而道歉。我所说的不是将jars发送给客户,而是关于启动应用程序时磁盘上jar文件的最佳格式。我知道jar文件是zip文件,可以使用不同的压缩级别(或根本不压缩),直接想知道压缩会如何改变启动性能,不仅在我的开发框中(其中有快速SSD磁盘,但也在较慢的磁盘上)。


Java jar 的内部格式是 ZIP 归档文件。任何一种工具都可以用于任何一种文件类型。这些文件可以被压缩(更快的磁盘访问速度)或未压缩(更少的 CPU 占用)。保持它们原样即可。 - BillThor
2个回答

2
我认为答案取决于你的应用。然而,要确定压缩的 JAR 文件是否会使你的应用程序启动更快或更慢,应该很容易进行实验。只需使用开启和关闭压缩的方式构建应用程序 JAR 文件,并比较应用程序启动时间。(在不同的机器上尝试;例如,慢硬盘、快硬盘、SSD,以及不同数量的 RAM。请记住,有些操作系统会积极缓存文件,请在计时测量中考虑这一点。)
当你在进行实验时,你还应该研究不同压缩级别(通过 jar 命令选项)和使用 pack200 的影响。
话虽如此,我的直觉是,对于本地安装的JAR文件,压缩和未压缩之间的差异将很小,用户几乎不会注意到这种差异。

1
在几乎任何合理的桌面环境中,磁盘IO的成本远高于压缩的成本。压缩文件几乎肯定会获得胜利。
话虽如此,JAR文件已经被压缩了。双重压缩通常不值得努力。因此,我建议不要压缩您的JAR文件,因为它们已经被压缩了。

3
我猜测楼主的问题更多是关于他们是否应该在交付前压缩他们自己的JAR文件 - 而不是压缩别人给他们的文件。 JAR文件并不一定要被压缩 - 它只是一个zip文件,如果不压缩内容也是合法的。 - Kevin Day
1
在几乎任何合理的桌面环境中,磁盘IO的成本远高于压缩的成本。压缩文件几乎肯定会是一个胜利。- 我不确定这是正确的。在具有足够内存的Linux系统上,操作系统将通过内存缓存文件。理论上,读取速度可以接近内存到内存的复制速度。 - Stephen C
@Daniel - 在 Linux 系统上,如果你最近使用过归档文件,那么很有可能它从一开始就在缓存中。这也是我为什么更喜欢在 Linux 上进行软件开发而不是在 Windows 上的原因之一。 - Stephen C
@Stephen C:如果你的计算机非常强大,可以在内存中随意存储JAR文件以备不时之需(老实说,过去几年里任何一台合理的电脑都可以做到这点),那么我会很惊讶你能否注意到压缩和未压缩之间的时间差异。根据我找到的一个随机基准测试网站,早期的2005年Athlon处理器可以达到60MB/s的解压速度。无论如何,这可能都是无关紧要的 :) - Steven Schlansker
当然。我只是认为它将低于测量阈值,或者至少不会太在意。如果你必须从网络中读取大量内容(比如使用Web Start或NFS),那么磁盘上的大小可能非常重要。无论如何,我同意 - 你必须测试它,答案将非常有情境性。 - Steven Schlansker
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接