如何为JRE 1.6创建rt.jar?

时间:2012-07-10 14:41:57

标签: java

所以这就是我所做的 -

我将rt.jar的内容解压缩到一个名为rt的文件夹中。然后,在rt文件夹中,我执行了以下jar命令

jar cf rt.jar *

这应该创建一个与原始rt.jar文件中的类相同的jar文件。

但是,这两个文件的文件大小明显不同。

Original rt.jar      -> 43.1 MB
Newly created rt.jar -> 20.6 MB

请注意,两个jar文件的解压缩内容大小相同。这让我觉得原来的rt.jar不是用jar命令创建的。那是怎么创造的?

2 个答案:

答案 0 :(得分:7)

它可能是使用jar命令的-0选项创建的,它特别不应用ZIP压缩,只是存储文件。

由于这个存档将被读取很多,并且按照现代标准,它非常小,为了23MB,减少运行时开销似乎是值得的。

(在任何情况下,即使这不是严格正确的,文件大小的差异也会降低到不同的压缩级别。)

答案 1 :(得分:7)

使用0压缩级别创建原始jar,以使加载类减少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
...