質問: ### 前提・実現したいこと OutOfMemoryErrorの解決するため、JavaVisualVMのヒープダンプを用いてオブジェクトの作成場所および参照先を調べようとすると「HeapWalker内のメモリー不足」というエラーが発生しました。 ### 発生している問題・エラーメッセージ ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/c6e3909f02e064623e1505ab99822bb1.png) ### 試したこと 試した事は下記の二点。 1:画像のエラーメッセージにて「このエラーを防止するには、NetBeans IDEのインストール・ディレクトリにあるetc/netbeans.confファイルで-Xmxの値を大きくします。」と書かれているが、NetBeansは本PCにインストールされていない。が、解決すればと思い、NetBeansをインストール後にetc/netbeans.confを下記のように書き直した。 変更前 netbeans_default_options="-J-client -J-Xss2m -J-Xms32m -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.dpiaware=true -J-Dsun.zip.disableMemoryMapping=true" 変更後 netbeans_default_options="-J-client -J-Xss12m -J-Xms256m -J-Xmx2048m -J-XX:PermSize=128m -J-XX:MaxPermSize=2048m -J-Dapple.laf.useScreenMenuBar=true -J-Dsun.java2d.noddraw=true" しかしながら、解決には至らなかった。 2:検索を行ったがこのエラーに対する対策法が見つけられなかった。 ### 補足情報(言語/FW/ツール等のバージョンなど) 環境 OS: Windows 10 (10.0) アーキテクチャ: amd64 64bit Javaホーム: C:\Program Files\Java\jre1.8.0_131 Javaバージョン: 1.8.0_131 JVM: Java HotSpot(TM) 64-Bit Server VM (25.131-b11, mixed mode) Javaベンダー: Oracle Corporation 他の情報 合計バイト数: 7,570,653,002 合計クラス数: 686 合計インスタンス数: 236,570,007 クラス・ローダー: 2 GCルート: 552 ファイナライズを待機しているオブジェクト数: 0
回答: > > このエラーを防止するには、NetBeans IDEのインストール・ディレクトリにあるetc/netbeans.confファイルで-Xmxの値を大きくします。 > > > このツールは(Java8までは)JDKに含まれているものですのでNetBeans前提ではありません。従ってエラーメッセージの内容の方が間違っていると思います。インストールされていないNetBeansのコンフィギュレーションをvisualvmが読み込めるはずはありませんので・・・ ### 対処1 JDKツールの多くは-JでJVMへのパラメーターを上書きできます。`jvisualvm -help`でヘルプを表示しても-Jは表示されないのですが、試しに以下で起動してみるとできました。 `jvisualvm -J-Xms32m -J-Xmx512m` jvisualvmは自分自身をモニターできるみたいで、起動後にVisualVMというアプリケーションをダブルクリックするとVMの起動パラメータを確認できます。上記のように起動すると以下のように表示されます。-Jで指定したパラメーターが追加されていることがわかります。 ``` -Xms24m -Xmx256m -Dsun.jvmstat.perdata.syncWaitMs=10000 ... -XX:+IgnoreUnrecognizedVMOptions -Xms32m -Xmx512m -Djdk.home=C:\Program Files\Java\jdk1.8.0_131 ... -Dnetbeans.dirs=C:\Program Files\Java\jdk1.8.0_131\lib\visualvm\visualvm;C:\Program Files\Java\jdk1.8.0_131\lib\visualvm\profiler ``` 念のため、「監視」タグの「ヒープ」の最大のところを確認すると、536,870,912(=512MB)になっていることが確認できました。 ### 対処2 前述のJVM起動パラメーターの最後にnetbeans.dirsという怪しい(?)プロパティーがあります。そのあたりのディレクトリーを調べてみると以下のようなファイルが見つかります。 C:\Program Files\Java\jdk1.8.0_131\lib\visualvm\etc\visualvm.conf 内容をみると以下のようになってましたので、これが本来エラーメッセージが言わんとしているファイルのようです。 ``` ... # Options used by VisualVM launcher by default: # (can be overridden by explicit command line switches) # visualvm_default_options="-J-client -J-Xms24m -J-Xmx256m ...省略..." ``` visualvmのデフォルトを変更してよいなら、こちらのファイルを書き換えるのも対処になると思います。