[戻る]

Java読書会BOF「Java Memory Management」を読む会 第2回

開催概要

場所

川崎市教育文化会館 第3会議室

出席者(敬称略)

高橋(智)、岩室、平山、高橋(徹)

  • 本日は、「p.46 3章 Zooming in on the Heap Space の Understanding the minor garbage collection algorithm」の途中から読み始めます。

3 Zooming in on the Heap Space

Understanding the minor garbage collection algorithm

  • 図3.5 の Edenの絵でオブジェクト間に隙間があるように見えるが、実際にはメモリに隙間はないのではないか?(パディングは使用しているものとみなせば)

  • 図3.7 の Eden spaceについても同上

  • p.52 ここでヒープとは、何が含まれるのか?

    → young generation と tenured space

  • ヒープの各サイズの設定をするJVMオプションがあるが、デフォルト値は?

    → javaのJVMオプション -XX:+PrintFlagsFinal を指定するとデフォルト値が確認できる:

    size_t MinHeapSize                              = 8388608                                   {product} {ergonomic}
    size_t MaxHeapSize                              = 4294967296                                {product} {ergonomic}
    size_t NewSize                                  = 1363144                                   {product} {default}
    size_t MaxNewSize                               = 2575302656                                {product} {ergonomic}
    uintx SurvivorRatio                             = 8                                         {product} {default}
    uintx NewRatio                                  = 2                                         {product} {default}
    size_t PretenureSizeThreshold                   = 0                                         {product} {default}
    

    MacBook(MacOS 12, RAM 16GB), OpenJDK 17での値です。

4 Freeing Memory Management with Garbage Collection

  • オブジェクトはマークされているかどうかを決定する特別なビットを保持。

    どのような構造?

  • 誤植 p.60 上6行目

    • 誤 "to the step"

    • 正 "to the stack"

  • 誤植 p.64 上のコード例の2行目

    • 誤 "private Nest;"

    • 正 "private Nest nest;"

  • 参照カウントを使う言語の例 Objective C では、メモリリークの原因となることがある

    • 宿題)参照カウントをメモリ管理に使う言語は他にあるか?

  • p.71 IBMとAzulは別な実装

    → IBMはJ9 VM、AzulはZing(Non stop GC)のことか?

  • p.72 Remembered setとは?

    • 宿題

  • CMSで、同期モードが失敗した時のGCは、ストップワールドの旧来のGC?

  • G1 GCは今のJDKのデフォルト

  • G1GCには、String deduplicationがある。どれくらい効果がありそう?

    • JDBCのようにResultSetを持つものを繰り返し呼ぶと効果ありそう

  • p.75 ZGCはG1GCのように分割されたリージョン管理なのか?

  • ZGCに Stringのdeduplicationは含まれているの?

    → JDK18で取り込まれたようです。

    https://logico-jp.io/2022/05/03/zgc-whats-new-in-jdk-18/

    -XX:+UseStringDeduplication の指定は必要

    • 宿題)deduplicatoinの効果をサンプルプログラムを作って確かめる

5 Zooming in on the Metaspace

  • p.78 PermGenがそのままMetaspaceになったのではなく、次の通り(知らなかった)

    • インターンされた文字列、クラス、静的変数はヒープに

    • クラスのメタデータはメタスペースに

6 Configuring and Monitoring the Memory Management of the JVM

  • jpsコマンドは、どこからJavaプロセスの実行情報を取得しているか?

    • 宿題)Windows, Linux, Mac それぞれでどうなっているか調べる

  • p.97 Stringの値がbyte配列に格納されるとあるが、Stringの値はchar配列に格納されるのではないか?

    • JDK 9から、JEP254 Compact Strings Improvement がデフォルトで有効になり、Stringの値はそれまでのchar配列からbyte配列に変更となった

  • 宿題)JDK 11/17のjavacでターゲットを1.8に指定した時に、JDK 9以降でremoveされたAPIを呼んでいたらコンパイルは通るか?

本日は、p.98 の最後まで読み終わりました。 次回は、p.99 の最初からです。 次回は、VisualVMを実際に動かしながら読み進めたいので、できる限りVisualVMを動かせる環境(ノートPC)等を持参してください。

[戻る]