2

これが私がしたことです-

rt.jarの内容をrtというフォルダーに解凍しました。次に、rtフォルダー内で次のjarコマンドを実行しました

jar cf rt.jar *

これにより、元のrt.jarファイルと同じクラスのjarファイルが作成されます。

ただし、2つのファイルのファイルサイズは大幅に異なります。

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

両方のjarファイルの解凍されたコンテンツのサイズが同じであることに注意してください。これにより、元のrt.jarがjarコマンドを使用して作成されたのではないと思います。では、どのように作成されたのでしょうか。

4

2 に答える 2

7

jarコマンドのオプションを使用して作成された可能性が-0あります。このコマンドは、特にZIP圧縮を適用せず、ファイルを保存するだけです。

このアーカイブは頻繁に読み取られ、最新の標準では非常に小さいため、実行時のオーバーヘッドを削減することは、 23MBの価値があるように思われます。

(いずれにせよ、これが厳密に正しくない場合でも、ファイルサイズの違いはさまざまなレベルの圧縮にまで下がります。)

于 2012-07-10T14:49:40.823 に答える
7

元の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-10T14:51:58.047 に答える