読者です 読者をやめる 読者になる 読者になる

きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

ReflectionとNative OOM

z/OS Java OutOfMemoryError

 前から不思議に思ってた事が1つ分かった。

IBM Potential native memory use in reflection delegating classloaders - United States

 

リフレクションでMethodごとにsun/reflect/DelegatingClassLoaderや

sun/reflect/GeneratedMethodAccessor<N>という具合のクラスが出来る。

これは知っていた。

ヒープダンプやプロファイルをやっていると気付く。

しかし、全てのメソッドがこうなるわけではないことにも気付いていた。

そこには何かしら閾値があるはずだ。

 

sun.reflect.inflationThresholdプロパティがそれらしい。

 

 

メモリーよ、ありがとう 

Thanks for the memory

この記事を昔斜め読みしてて、読み落としていたようだ。

 

クラスが出来ることで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レポートを見る機会がない。

日本に戻ってからの研究にしとこう。