Java プログラムのメモリ アクセス パターンを調べたい。これを達成するためのフレームワークまたは方法はありますか。
メモリアドレス m1、m2、m3 などをこの順序でアクセスするプログラム P があるとします。これらのアクセスをその順序で確認できるようにしたいのですが、可能であれば、どのタイプのオブジェクトがアクセスされましたか?
更新(Durandalの提案に追加):
PIN インストルメンテーションを使用して Java プログラムを実行することで、いつでもメモリ アクセス パターンを見つけることができます。これは、オブジェクトへのメモリアドレスのマッピングを失うことを除いて、すべて良いことです。私がやりたい研究の重要な側面の 1 つは、メモリ使用量を対応する型 (クラス) にマップできるようにすることです。
メモリ使用パターンが JVM の実装に依存することは正しく述べられていますが、それは調査の後のステップとして検討したいと思います。現在、バイトコードのインストルメンテーションのみを探しています。(間違った方向に進んでいる場合は修正してください!)
バイトコード インストルメンテーションがキャッシュの使用状況の分析にどのように役立つと思いますか? 説明の前に!これは私がやりたいことのほんの一面です。これは、さまざまなオブジェクト (または特定のクラスに属するオブジェクト) によるキャッシュの使用状況に関する情報を提供するには、メモリ アクセス パターン (PIN、または変更された VM などから取得) が不十分な場合に行います。 . バイトコードアクセスを次のように取得するとします
ObjectA
ObjectB
ObjectC
...
オブジェクトのサイズを簡単に見つけることができます。また、これがオブジェクトへの最初のアクセスであるかどうかによって、オブジェクトのメモリ アクセスがメモリ割り当てであったかどうかを確認することもできます。次に、実行時に JVM が継続的にメモリを割り当てると仮定すると、(キャッシュ シミュレーションを実行することで) キャッシュの使用量を推測できます。さて、これはあまり良い仮定ではありませんが、それでもキャッシュ使用量の上限を与えてくれます (少なくとも私はそう信じています)。