Java OutOfMemoryError対策
2009/04/14 16:23Update
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が不足していることを示しています。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)
OutOfMemoryError対策
■基本的な解決策として、javaコマンドに-Xmxオプションで適当なヒープサイズ(最大値)を指定しておけば、ほとんど解決できると思います。
例:
java -Xmx1024m -jar my-jar.jar
java -Xms512m -Xmx1024m SomeClass
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" .../>
.
Sponsored Link
Comments
- Relative Articles
- Java開発及び実行環境の構築 | Linux篇 - (2008/08/31 20:34)
- Java開発及び実行環境の構築 | Windows篇 - (2008/08/31 21:18)
- 5分でJava Hello World! - (2008/08/31 22:13)
- Java言語の制御構文 - 条件分岐if/else/else if - (2008/10/01 21:30)
- Java言語の繰り返し制御構文 - for文 - (2008/10/03 18:22)
- Java言語の繰り返し制御構文 - do ... while文 - (2008/10/03 21:23)
- Java言語の繰り返し制御構文 - while文 - (2008/10/03 21:32)
- Java言語の基礎 - javacコマンドによるコンパイル - (2008/10/10 17:58)
- Java アクセス修飾子概要 - (2008/10/29 18:31)
- Javaアノテーション機能 概要 - (2009/02/12 13:06)