Java8メタスペースとヒープの使用

Jigar Joshi :

クラスを動的に生成してロードするこのコードがあります

import javassist.CannotCompileException;
import javassist.ClassPool;

public class PermGenLeak {
    private static final String PACKAGE_NAME = "com.jigarjoshi.permgenleak.";

    public static void main(String[] args) throws CannotCompileException, InterruptedException {
        for (int i = 0; i < Integer.MAX_VALUE; i++) {
            ClassPool pool = ClassPool.getDefault();
            pool.makeClass(PACKAGE_NAME + i).toClass();
            Thread.sleep(3);
        }

    }
}

私はこのクラスをJava 7(jdk1.7.0_60)に対して起動しましたが、期待どおりにPermGenSpaceがいっぱいになり、未使用のヒープJava 7のメモリ使用量 イメージがpermgenの使用状況を示し、最後にJVMが終了しました

現在、同じコードがJava 8(jdk1.8.0_40-ea)に対して実行され、予想どおりネイティブメモリ(メタスペース)を拡張し続けましたが、驚くべきことに、1gのメタスペースでOldGenで3gのヒープを消費しました(時間の経過とともに維持されるメタスペースのほぼ3倍)

Java8のメモリ使用量 メタスペース使用率の経時変化とシステムメモリ使用量のサンプルを示す画像

ジョン・マサミツからのこのメールこのJEPチケットは言う

インターンStringおよびクラス統計とその他のデータはヒープに移動されました

より多くのクラスをメタスペースにロードするときに、ヒープの増加を正確に行うものは何ですか?

アパンギン:

実行jmap -histo PIDして、ヒープスペースを消費するオブジェクトを確認します。
私があなたの例を実行したとき、Javassist補助オブジェクトでいっぱいのヒープを見ました:

 num     #instances         #bytes  class name
----------------------------------------------
   1:        592309      312739152  [Ljavassist.bytecode.ConstInfo;
   2:       6515673      208501536  java.util.HashMap$Node
   3:       2964403      169188824  [C
   4:       1777622      102165184  [Ljava.lang.Object;
   5:       4146200       99508800  javassist.bytecode.Utf8Info
   6:       3553889       85293336  java.util.ArrayList
   7:       2964371       71144904  java.lang.String
   8:        593075       56944008  java.lang.Class
   9:        592332       47388032  [Ljava.util.HashMap$Node;
  10:        592309       37907776  javassist.bytecode.ClassFile
  11:        592308       37907712  javassist.CtNewClass
  12:       1185118       28555808  [B
  13:        592342       28432416  java.util.HashMap
  14:       1184624       28430976  javassist.bytecode.ClassInfo
  15:        592309       28430832  [[Ljavassist.bytecode.ConstInfo;
  16:        592322       23692880  javassist.bytecode.MethodInfo
  17:        592315       23692600  javassist.bytecode.CodeAttribute
  18:        592434       18957888  java.util.Hashtable$Entry
  19:        592309       18953888  javassist.bytecode.ConstPool
  20:        592308       18953856  java.lang.ref.WeakReference
  21:        592318       14215632  javassist.bytecode.MethodrefInfo
  22:        592318       14215632  javassist.bytecode.NameAndTypeInfo
  23:        592315       14215560  javassist.bytecode.ExceptionTable
  24:        592309       14215416  javassist.bytecode.LongVector
  25:        592309       14215416  javassist.bytecode.SourceFileAttribute
  26:        592507        9487584  [I
  27:             8        6292528  [Ljava.util.Hashtable$Entry;
  28:           212          18656  java.lang.reflect.Method
  29:           407          13024  java.util.concurrent.ConcurrentHashMap$Node
  30:           124           8928  java.lang.reflect.Field

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

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

編集
0

コメントを追加

0

関連記事

大規模な並列Java8ストリームを使用するときにヒープスペースエラーを防ぐ方法

Java8メタスペース-減少を避ける

JavaヒープスペースとRAM

Java8関数スタイルで、値を既存のキーと値のペアにマップする方法

java.lang.OutOfMemoryError:PayaraとEclipseのJavaヒープスペース

Javaヒープとスタックメモリの割り当て

スタックとヒープのJavaメモリ割り当て

Javaメモリ不足のヒープスペース

ヒープに比例Java8でクラススペースを圧縮していますか?

Wildfly8.2.1にデプロイされたJava8アプリケーションのメタスペースメモリ消費の問題

opencsvの使用-java.lang.OutOfMemoryError:Javaヒープスペース

Java8ストリームの可変パラメータ

なぜ、ヒープメモリは、Java 8でメタスペースと一緒に上がっていますか?

Java8でのBiConsumerインターフェースの使用

JVMのメモリ割り当てとJavaのメモリ不足について:ヒープスペース

SQLiteインメモリデータベースのJavaヒープスペースを使用していますか?

java.lang.OutOfMemoryErrorの取得:Springkafkaを使用してメッセージを生成するときのJavaヒープスペース

Java8ストリーミングマップ関数をパラメーターとして渡す

Java8でのイテレーターとスプリッターの違い

メモリ不足エラー、Javaヒープスペース

Java8パス関数をパラメーターとして

Javaスタックとヒープメモリ管理

Java8のオプションリターンを使用したJPAのベストプラクティス?

多くの連続した画像を使用するときにメモリ不足のJavaヒープスペースを修正する方法

Java8ストリームとリストのグループ化

Java-outOfMemory-ヒープスペース

Javaヒープスペース

React Native:Javaヒープスペース

例外Javaヒープスペース

TOP 一覧

  1. 1

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  2. 2

    ソートされた検索、ターゲット値未満の数をカウント

  3. 3

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  4. 4

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  5. 5

    Ansibleで複数行のシェルスクリプトを実行する方法

  6. 6

    Reactでclsxを使用する方法

  7. 7

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  8. 8

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  9. 9

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  10. 10

    PowerShellの分割ファイルへのヘッダーの追加

  11. 11

    Chromeウェブアプリのウェブビューの高さの問題

  12. 12

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  13. 13

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  14. 14

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  15. 15

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  16. 16

    MLでのデータ前処理の背後にある直感

  17. 17

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  18. 18

    reCAPTCHA-エラーコード:ユーザーの応答を検証するときの「missing-input-response」、「missing-input-secret」(POSTの詳細がない)

  19. 19

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  20. 20

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  21. 21

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

ホットタグ

アーカイブ