JAva visual VM使用概要
転載は出典を明記してください
http://blog.csdn.net/pony_maggie/article/details/44999175
作者:ポニー
VisualVMは、無料のパフォーマンス分析ツールです.jvmstat、JMX、SA(Serviceability Agent)、Attach APIなど、さまざまな方法でプログラム実行時からリアルタイムデータを取得し、動的なパフォーマンス分析を行います.最も主要な機能はメモリの漏洩を監視し、ゴミの回収を追跡し、実行時のメモリ、cpu分析、スレッド分析などである.
実例を通して説明する.最初のステップではviual VMをインストールします.jdk 6以降のインストールディレクトリにこのツールが付属しているので、独立してインストールする必要はありません.
開くと次の図になります.
eclipseでプログラムを実行すると、visual VMは次のコードヘッダなど、実行中のプログラムを自動的に認識します.
eclipseでこのプログラムを実行し、visual VMで監視ビューを開きます.
CPU部分が表示されないのは、私が実行しているjdkバージョンが低すぎるからだと思います.メモリ部分はスタックとpermの使用状況を見て、上のプログラムを見てください.testStringPoolWithLongString関数はデッドサイクルで、Stringのinternを絶えず呼び出し、internは文字列オブジェクトの正規化表現形式を返し、internメソッドを呼び出すと、プールにこのStringオブジェクトに等しい文字列が含まれている場合は、プールの文字列を返します.そうでなければ、このStringオブジェクトをプールに追加し、このStringオブジェクトの参照を返します.JAva 7以前は、文字列定数プールはperm空間に置かれていましたが、java 7からheap空間に置かれていました.私が使っているバージョンは1.6なので、permビューに切り替えると別の光景が見えます.
図から分かるように、GCが絶えず、申請空間が絶えない.
スレッドセクションには、現在のユーザースレッドとデーモンスレッドの数が表示されます.
http://blog.csdn.net/pony_maggie/article/details/44999175
作者:ポニー
VisualVMは、無料のパフォーマンス分析ツールです.jvmstat、JMX、SA(Serviceability Agent)、Attach APIなど、さまざまな方法でプログラム実行時からリアルタイムデータを取得し、動的なパフォーマンス分析を行います.最も主要な機能はメモリの漏洩を監視し、ゴミの回収を追跡し、実行時のメモリ、cpu分析、スレッド分析などである.
実例を通して説明する.最初のステップではviual VMをインストールします.jdk 6以降のインストールディレクトリにこのツールが付属しているので、独立してインストールする必要はありません.
開くと次の図になります.
eclipseでプログラムを実行すると、visual VMは次のコードヘッダなど、実行中のプログラムを自動的に認識します.
public class StringPoolTest
{
public void testStringPoolWithLongString()
{
long i = 0;
while(true)
{
String longString = "this is a very very long string,to test the gc behavior of the string constant pool" + i;
longString.intern();
i++;
}
}
/**
* @param args
*/
public static void main(String[] args)
{
StringPoolTest test = new StringPoolTest();
test.testStringPoolWithLongString();
}
}
eclipseでこのプログラムを実行し、visual VMで監視ビューを開きます.
CPU部分が表示されないのは、私が実行しているjdkバージョンが低すぎるからだと思います.メモリ部分はスタックとpermの使用状況を見て、上のプログラムを見てください.testStringPoolWithLongString関数はデッドサイクルで、Stringのinternを絶えず呼び出し、internは文字列オブジェクトの正規化表現形式を返し、internメソッドを呼び出すと、プールにこのStringオブジェクトに等しい文字列が含まれている場合は、プールの文字列を返します.そうでなければ、このStringオブジェクトをプールに追加し、このStringオブジェクトの参照を返します.JAva 7以前は、文字列定数プールはperm空間に置かれていましたが、java 7からheap空間に置かれていました.私が使っているバージョンは1.6なので、permビューに切り替えると別の光景が見えます.
図から分かるように、GCが絶えず、申請空間が絶えない.
スレッドセクションには、現在のユーザースレッドとデーモンスレッドの数が表示されます.