Java OutOfMemoryError対策

2013/11/29 00:50更新
TAGS: Java | OutOfMemoryError|heap|ヒープ|Eclipse|Tomcat

Javaプログラム(EclipseやTomcatなどのサーバ、スタンドアロンJavaなど)を実行するとき、たびたびOutOfMemoryError異常を出ることがあります。本文はその対策について学びます。

現象:


よくあるエラーメッセージ出力例:
C:\> java -jar my-jar.jar

java.lang.OutOfMemoryError: Java heap space
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
これはJava heap spaceが不足していることを示しています。

OutOfMemoryError対策


■基本的な解決策として、javaコマンドに-Xmxオプションで適当なヒープサイズ(最大値)を指定しておけば、ほとんど解決できると思います。
例:
java -Xmx1024m -jar my-jar.jar

java -Xms512m -Xmx1024m SomeClass

■Tomcat OutOfMemoryErrorの場合
catalina.batやcatalina.shのJAVA_OPTSに以下のように追加します。
set JAVA_OPTS=%JAVA_OPTS% -Xms512m -Xmx1024m ...

■Eclipse OutOfMemoryErrorの場合
1)$ECLIPSE_HOME\eclipse.ini(初期設定ファイル)を修正
-vmargs
-Xms80m
-Xmx512m


2)Eclipseの起動コマンドを修正
eclipse.exe -vm <path to your vm>\jre\bin\javaw.exe -vmargs -Xmx1024M


3)Antなどの外部ツールを使うときのOutOfMemoryError
Eclipseのメニューから
英語版:Window -> Preferences -> Java -> Installed JREs -> Edit > Default VM Parameter
日本語版:ウィンドウ⇒設定⇒インストール済みJRE⇒編集⇒デフォルト VM引数
を「-vmargs -Xmx1024M」に設定します。

また、Antのタスクに以下のように設定します。
<javac fork="true" memoryinitialsize="128m" memorymaximumsize="512m" .../>

.

著者について
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


コメント

記事への評価

USER LOGIN FIRST
メールアドレス:
パスワード: