ReflectionとNative OOM
前から不思議に思ってた事が1つ分かった。
IBM Potential native memory use in reflection delegating classloaders - United States
リフレクションでMethodごとにsun/reflect/DelegatingClassLoaderや
sun/reflect/GeneratedMethodAccessor<N>という具合のクラスが出来る。
これは知っていた。
ヒープダンプやプロファイルをやっていると気付く。
しかし、全てのメソッドがこうなるわけではないことにも気付いていた。
そこには何かしら閾値があるはずだ。
sun.reflect.inflationThresholdプロパティがそれらしい。
この記事を昔斜め読みしてて、読み落としていたようだ。
クラスが出来ることでNativeを使うことは理解の範疇ではあった。
JITになってるのも当然だからそこもOK。
今回IBM JDK5なら15回という閾値を拾えたので今後に活かそう。
とりあえずjavacoreからJDK6の時の値は見ておくなど。
Native Memoryは普通はプロセスサイズをモニターして見極めるんだろうが、
(LUWならHealth Centerでも大丈夫だと思う)
z/OSの場合はRMFレポートでVirtual Storage Activity reportを見て
Native Memoryを分析するのが一般的なんだろうな。
psコマンドでも値は出るだろうけど、VSTORと合ってるのか検証したことがない。
2GBバーより上の値は怪しいってのはこないだ試してるし。
ダンプは毎日好きなだけ見れてるが、RMFレポートを見る機会がない。
日本に戻ってからの研究にしとこう。