jdk 8はこっそり1 Gメモリを占有して、あなたは知っていますか?


目次
  • 線上現象
  • 検査ステップ
  • 関連実験(ローカル)
  • 再現現象
  • 最適化案1
  • 最適化案二
  • 案三
  • まとめ
  • せんじょうげんしょう
    オンラインで起動し、莫名は1 Gシステムのメモリを多く消費します.
    チェックステップ
  • dumpメモリ、および分析、異常なし
  • 総メモリ、jvm設定により、スタック外メモリ
  • を占有することを決定する.
    相関実験(ローカル)
    ふくげんしょう
    jvmパラメータの設定
    -server 
    -Xms128m 
    -Xmx128m
    

    jconsoleではcompressedClassSpaceが1 Gのメモリスペースを開いているのがわかりますが、実際にはそれほど使われていません
    最適化シナリオ1
    メタ空間サイズの設定
    -server 
    -Xms128m 
    -Xmx128m 
    -XX:MetaspaceSize=128m 
    -XX:MaxMetaspaceSize=128m
    

    再度jconsoleで確認するとcompressedClassSpaceとMetaspaceの空間サイズが同じであることがわかりました
    最適化シナリオ2
    compressedClassSpaceを閉じる
    -server 
    -Xms128m 
    -Xmx128m 
    -XX:MetaspaceSize=128m 
    -XX:MaxMetaspaceSize=128m 
    -XX:-UseCompressedClassPointers 
    

    or
    -Xms128m 
    -Xmx128m 
    -XX:MetaspaceSize=128m 
    -XX:MaxMetaspaceSize=128m 
    -XX:-UseCompressedOops 
    

    UseCompressedClassPointersまたはUseCompressedOps compressedClassSpaceを閉じると閉じられます
    シナリオ3
    CompressedClassSpaceSizeサイズの設定
    -Xms128m 
    -Xmx128m 
    -XX:CompressedClassSpaceSize=256m
    

    まとめ
    オンライン上の現象に基づいて、ローカルで再現し、テスト、チューニングし、以上の3つのスキームを実験し、CompressedClassSpaceSizeのデフォルト1 Gサイズの問題を解決することができます.具体的なCompressedClassSpaceSizeはMetaspaceによって限定されるか、実際の状況に応じて計算されてサイズが限定されます.