質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1079閲覧

JavaVisualVMで生じたHeapWalker内のメモリー不足に関して

naka41456

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/10/14 12:25

###前提・実現したいこと
OutOfMemoryErrorの解決するため、JavaVisualVMのヒープダンプを用いてオブジェクトの作成場所および参照先を調べようとすると「HeapWalker内のメモリー不足」というエラーが発生しました。

###発生している問題・エラーメッセージ
イメージ説明

###試したこと
試した事は下記の二点。

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

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のデフォルトを変更してよいなら、こちらのファイルを書き換えるのも対処になると思います。

投稿2017/10/14 20:29

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naka41456

2017/10/15 02:26

無事に上記の対処をしたところ、エラーを解決しました。 ご回答頂き、本当に有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問