Java11がjava.util.zip.ZipFile $ Sourceをヒープ上に保持しているのはなぜですか?

tporeba

誰かが私が見ているものがJava11の意図的で正しい動作なのか、それともある種のリークなのかを理解するのを手伝ってもらえますか?ばかげたシンプルなHelloWorldアプリを見てみましょう。

package com.example;

public class HelloWorld {
    public static void main(String[] args) throws InterruptedException {
        for( int i =0 ; i < 50; i++){
            Thread.sleep(1000);
            System.out.println("hello " + i);
        }
    }
}

唯一の興味深い部分は、jarの依存関係です。それはどんな瓶でもかまいませんが、問題をより壮観にするために、大きなものを使用しましょう-古いgwt-user jar、重さ30MB:

plugins {
    id 'java'
}

group 'com.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    // https://mvnrepository.com/artifact/com.google.gwt/gwt-user
    compile group: 'com.google.gwt', name: 'gwt-user', version: '2.7.0'
}

アプリを実行し、jvisualvmを開き、ダンプを作成して、保持されている次のセットを探しますjava.util.zip.ZipFile$Source

jvisualvm heapdump

クラスパスからのそのjar(実際には使用されていません)は1.5MBのヒープを占有します。GC中に消えることはなく、メモリが不足しても消えることはありません。これらのエントリはOutOfMemoryヒープダンプにも表示されます。

The entry is obviously kept by a map java.util.zip.ZipFile$Source.files. From the source I can tell that this theoretically should be cleaned by a Common-Cleaner thread from InnocuousThreadGroup, but I don't see it happening.

I encountered this problem when migrating a small, lightweight Java app from JDK8 to JDK11. With low Xmx settings those jars use up significant portion of my heap as compared to JDK8.

So is it a bug or a feature?

Claes Redestad

This is deliberate.

The observation that memory use seem to increase is caused by moving from a native to pure java-based implementation[1] for zip/jar files in JDK 9. Mainly for stability purposes.

I'll note that the native implementation allocates similar and similarly sized data structures, but they were hidden out of sight from tools inspecting the java heap.

ただし、合計メモリフットプリントは多かれ少なかれ中立である必要がありますが、Javaヒープの使用量の増加に対応するために、Javaヒープサイズを増やす必要がある場合があります。

[1] https://bugs.openjdk.java.net/browse/JDK-8145260

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

java.util.zip-ZipInputStreamとZipFile

分類Dev

java.util.zip.ZipFile.close()がIOExceptionをスローするのはいつですか?

分類Dev

zipfileがzipと同じ出力.zipファイルサイズを提供しないのはなぜですか?

分類Dev

Java util zipが「破損した」zipファイルを作成する

分類Dev

java.util.zipと構造を保持するZipディレクトリ

分類Dev

ZipInputStreamなしでZipOutputStreamにZipEntryを追加する場合のjava.util.zip.ZipException

分類Dev

java.util.zip.ZipExceptionを解決するには?

分類Dev

エラー:java.util.zip.ZipException:エントリが重複しています

分類Dev

Java.util.zipが新しいファイルを追加すると、jar全体が上書きされますか?

分類Dev

java.util.zipを使用して有効なepubを構築する

分類Dev

java.util.zip.CRC32でのCRC-32の実装

分類Dev

java.util.zip.ZipException:重複エントリ:克服する方法

分類Dev

java.util.zip.ZipException: エントリの重複エラー

分類Dev

Tomcatが原因:java.util.zip.ZipException:zipファイルを開く際のエラー

分類Dev

Android Studio java.util.zip.ZipException:重複したエントリ

分類Dev

zipfileはzipをフォルダに抽出します

分類Dev

java.util.zip-ディレクトリ構造の再作成

分類Dev

java.util.zip.ZipException:packageAllDebugClassesForMultiDex中の重複エントリ

分類Dev

java.util.zip.ZipExceptionの取得:重複エントリ例外

分類Dev

java.util.zip.Deflaterから生のデフレートを取得することは可能ですか?

分類Dev

java.util.zip.Deflaterから生のデフレートを取得することは可能ですか?

分類Dev

java.util.zip.ZipException:ZIPファイルのエントリが多すぎます

分類Dev

Java.Util.Stackがループの最後の要素をポップしないのはなぜですか?

分類Dev

ラムダ(java.util.stream.Streams.zip)でJDK8を使用してストリームを圧縮する

分類Dev

zipfileを使用して絶対パスにzipファイルを作成する方法

分類Dev

java.util.loggingを使用しないのはなぜですか?

分類Dev

Python zipfile dosen't release zip file

分類Dev

アンドロイド:ZIPファイル()java.util.zip.ZipException:zipファイルであるには余りにも短いファイル:0

分類Dev

Mavenプロジェクトをデプロイすると、java.util.zip.ZipException:LOCヘッダーが無効になります(署名が不正)

Related 関連記事

  1. 1

    java.util.zip-ZipInputStreamとZipFile

  2. 2

    java.util.zip.ZipFile.close()がIOExceptionをスローするのはいつですか?

  3. 3

    zipfileがzipと同じ出力.zipファイルサイズを提供しないのはなぜですか?

  4. 4

    Java util zipが「破損した」zipファイルを作成する

  5. 5

    java.util.zipと構造を保持するZipディレクトリ

  6. 6

    ZipInputStreamなしでZipOutputStreamにZipEntryを追加する場合のjava.util.zip.ZipException

  7. 7

    java.util.zip.ZipExceptionを解決するには?

  8. 8

    エラー:java.util.zip.ZipException:エントリが重複しています

  9. 9

    Java.util.zipが新しいファイルを追加すると、jar全体が上書きされますか?

  10. 10

    java.util.zipを使用して有効なepubを構築する

  11. 11

    java.util.zip.CRC32でのCRC-32の実装

  12. 12

    java.util.zip.ZipException:重複エントリ:克服する方法

  13. 13

    java.util.zip.ZipException: エントリの重複エラー

  14. 14

    Tomcatが原因:java.util.zip.ZipException:zipファイルを開く際のエラー

  15. 15

    Android Studio java.util.zip.ZipException:重複したエントリ

  16. 16

    zipfileはzipをフォルダに抽出します

  17. 17

    java.util.zip-ディレクトリ構造の再作成

  18. 18

    java.util.zip.ZipException:packageAllDebugClassesForMultiDex中の重複エントリ

  19. 19

    java.util.zip.ZipExceptionの取得:重複エントリ例外

  20. 20

    java.util.zip.Deflaterから生のデフレートを取得することは可能ですか?

  21. 21

    java.util.zip.Deflaterから生のデフレートを取得することは可能ですか?

  22. 22

    java.util.zip.ZipException:ZIPファイルのエントリが多すぎます

  23. 23

    Java.Util.Stackがループの最後の要素をポップしないのはなぜですか?

  24. 24

    ラムダ(java.util.stream.Streams.zip)でJDK8を使用してストリームを圧縮する

  25. 25

    zipfileを使用して絶対パスにzipファイルを作成する方法

  26. 26

    java.util.loggingを使用しないのはなぜですか?

  27. 27

    Python zipfile dosen't release zip file

  28. 28

    アンドロイド:ZIPファイル()java.util.zip.ZipException:zipファイルであるには余りにも短いファイル:0

  29. 29

    Mavenプロジェクトをデプロイすると、java.util.zip.ZipException:LOCヘッダーが無効になります(署名が不正)

ホットタグ

アーカイブ