Javaでメモリ計測する方法を調べた。
Java標準機能にある「jconsole.exe」でメモリ計測が可能であることが分かった。
参考URL)https://docs.oracle.com/javase/jp/6/technotes/guides/management/jconsole.html
実際に計測してみよう。
0.サンプルソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
package main; import java.util.ArrayList; import java.util.List; /** * サンプルメインクラス. */ public class SampleMain { /** バイト情報を保持リスト. */ private static List<byte[]> byteList = new ArrayList<byte[]>(); /** * メインメソッド. * @param args * @throws Exception */ public static void main(String[] args) throws Exception { for (int i = 1;;i++) { System.out.println(String.format("[%d回目]2秒スリープ", i)); Thread.sleep(2000); // 1KBを生成 byte[] bArray = new byte[1024]; for (byte b : bArray) { b = (byte)0xff; } // リストに追加 byteList.add(bArray); } } } |
1.メモリを計測しよう☆
(1) 作成したソースを実行します。
(2) jconsole.exeを起動します。
jconsoleは以下のJDKインストールディレクトリに配置されています。
例)C:\Program Files\Java\jdk1.8.0_151\bin\jconsole.exe
(3) 接続プロセス(ローカルプロセス or リモートプロセス)を選択し、接続ボタンを押します。
●ローカルプロセス
対象Javaアプリを選択します。
●リモートプロセス
1. リモートプロセスで実行する場合は、以下のVM引数を追加してJavaアプリ実行する必要があります。
1 2 3 4 |
-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=★ポート番号★ -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false |
2. 入力欄に「lホスト名(IPアドレス):ポート番号」を入力し、接続ボタンを押します。
※例ではlocalhost:7079で接続します。
サンプルソースでは、無限ループでバイトをリストに追加する処理となっているので、メモリが上昇する。
以上でした。