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
って書かないと行けなかったり、おおよそ標準で読み込むパッケージで共通している引数で指定方法が微妙に違う、みたいなことが結構あって、最近調べているとつらみが多い。
参考
メモリ管理、学生の頃からずっと苦手なんだよなあ……。根本的に理解出来てないんだと思うんだけど「これがワイの最強の答えや!」→「ぜんぜん違うやんけ! なんでめちゃくちゃ食っとるんや!」ってなりがち。