AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

java のメモリ設定値

java -XX:+PrintFlagsFinal -version とかすると、 version 出力に合わせて出してくれる。 ただこれ、今アクティブなプロセスの java についての解析ではなく、パスが通っている java のコマンド実行時点での値っぽいので、実質あんまり意味ない?

例えば StackOverFlow が発生しまくってて、 -Xss で大きいスレッドサイズ指定してやりたいけど、コンフィグが妥当か? みたいなのを調べる時には利用できる。

調べても全然でてこなくてめっちゃ困ったのでメモしておく。

何も指定しない場合

[user@localhost ~]$ ./java -version | grep ThreadStackSize

     intx CompilerThreadStackSize                  = 1024                                   {pd product} {default}
     intx ThreadStackSize                          = 1024                                   {pd product} {default}
     intx VMThreadStackSize                        = 1024                                   {pd product} {default}
java version "11.0.11" 2021-04-20 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.11+9-LTS-194)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.11+9-LTS-194, mixed mode)

Xss オプションでスレッドスタックサイズを拡張した場合

[user@localhost ~]$ ./java -XX:+PrintFlagsFinal -Xss8M -version | grep ThreadStackSize

     intx CompilerThreadStackSize                  = 1024                                   {pd product} {default}
     intx ThreadStackSize                          = 8192                                   {pd product} {command line}
     intx VMThreadStackSize                        = 1024                                   {pd product} {default}

java の引数分かりづらい問題

-Xss:8M のように指定しろ、ってドキュメントには書いてありがちだけど、実際には -Xss8M って書かないと行けなかったり、おおよそ標準で読み込むパッケージで共通している引数で指定方法が微妙に違う、みたいなことが結構あって、最近調べているとつらみが多い。

参考

メモリ管理、学生の頃からずっと苦手なんだよなあ……。根本的に理解出来てないんだと思うんだけど「これがワイの最強の答えや!」→「ぜんぜん違うやんけ! なんでめちゃくちゃ食っとるんや!」ってなりがち。

qiita.com

itdoc.hitachi.co.jp