web-dev-qa-db-ja.com

JDK 8メモリレイアウトとガベージコレクション

私が 知っている から、JDK 8以降、PermGenはJavaの歴史の過去のページになります。すべてが素敵で陽気な...しかし、新しいメモリレイアウトはどのように見えるでしょうか?これは新しいプラットフォームのGCに影響しますか?

30
Olimpiu POP

PermGenはMetaspaceに置き換えられます Oracle/Sun JDK8では非常に似ています。主な違いは、メタスペースは実行時に拡張できることです。

38
Adam Dyga

これは、permGenが存在する場合です enter image description here

メタスペースが導入された後 enter image description here

確かに、Java 8.でGCに多くの改善があります。これを確認できます stackoverflow post

メタスペースでは、複数のマッピングされた仮想メモリスペースがメタデータに割り当てられ、割り当て(チャンク単位)はクラスローダーのタイプとその活性度に応じてクラスローダーごとに行われます。チャンクは空きチャンクリストに返され、空になると仮想メモリスペースも返されます。

GCの利点は

  • 完全な収集中、メタデータからメタデータへのポインターはスキャンされません
  • メタデータスキャン用の多くの複雑なコード(特にCMS用)が削除されました。
  • メタスペースには、Javaヒープへのポインターがほとんどありません。
  • メタデータの圧縮コストなし
  • ルートスキャンを削減します(VMロードされたクラスおよび他の内部ハッシュテーブルのディクショナリはスキャンしません)。

詳細はこちら

23
pardeep131085