所以这是我所做的-
我将rt.jar的内容解压缩到一个名为rt的文件夹中。然后,在rt文件夹中,我执行了以下jar命令
jar cf rt.jar *这将创建一个jar文件,其类与原始rt.jar文件中的类相同。
但是,这两个文件的文件大小有很大不同。
Original rt.jar -> 43.1 MB
Newly created rt.jar -> 20.6 MB请注意,两个jar文件的解压缩内容的大小是相同的。这让我认为原来的rt.jar不是使用jar命令创建的。那么它是如何创建的呢?
发布于 2012-07-10 22:51:58
最初的jar是用0压缩级别创建的,以减少加载类的CPU消耗。
> unzip -v rt.jar
Archive: rt.jar
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
0 Stored 0 0% 02-03-2012 21:20 00000000 META-INF/
2343 Stored 2343 0% 02-03-2012 21:20 a653ef50 META-INF/MANIFEST.MF
754 Stored 754 0% 02-03-2012 21:12 fa8ba6d9 com/oracle/net/Sdp$1.class
350 Stored 350 0% 02-03-2012 21:12 ca729c09 com/oracle/net/Sdp$SdpSocket.class
...发布于 2012-07-10 22:49:41
它可能是使用jar命令的-0选项创建的,该命令专门不应用ZIP压缩,而只是存储文件。
由于这个归档文件将被大量读取,而且按照现代标准,它非常小,为了23MB,减少的运行时开销似乎是值得的。
(在任何情况下,即使这不是严格意义上的正确,文件大小的差异也将取决于不同的压缩级别。)
https://stackoverflow.com/questions/11415830
复制相似问题