「Eclipse」IDEで新しいプロジェクトを作成すると、突然「メモリ不足エラー」という警告メッセージが表示されます。理由を特定できません。理由を知っている人がいたら教えてください。
フォローパラメーターでEclipseを起動してみてください。
Eclipse.exe -vmargs -Xms512m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=128m
または、要件に合わせてこれらのパラメーターを正当化します
Mac OS XでEclipseを実行している場合
Eclipse.app
アイコンを右クリックします
Show Package Contents
をクリックします
Eclipse.ini
ファイルを開きます
以下のパラメーターを変更
-Xms512m
-Xmx3000m (Hoping your developer box has >4GB of memory)
以下のパラメーターを追加
-XX:PermSize=256m
-XX:MaxPermSize=512m
最も明白な説明は、あなたが本当にメモリ不足であるということです。その場合、より大きなヒープでEclipseを起動すると役立つはずです
-vmargs -Xmx256M
256Mを変更して、何が機能するかを確認します。
少数の単純なプロジェクトがある場合、この問題が発生することはないと思います。追加のプラグインを使用している場合、おそらく必要なヒープの量を増やす必要があるかもしれません。
前
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.Eclipse.platform
--launcher.XXMaxPermSize
256m
後:
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
512M
-showsplash
org.Eclipse.platform
--launcher.XXMaxPermSize
512m
問題に関連するかどうかはわかりませんが、OpenJDK 7を使用するSwingプロジェクトで同様の問題が発生しました。
開始(Run
ボタン)と終了('X'
/Alt+F4
)私のアプリケーション、コンソールでこのエラーを受け取りました:
Exception in thread "main" Java.lang.OutOfMemoryError: unable to create new native thread
at Java.lang.Thread.start0(Native Method)
at Java.lang.Thread.start(Thread.Java:691)
at Sun.awt.AWTAutoShutdown.activateBlockerThread(AWTAutoShutdown.Java:334)
at Sun.awt.AWTAutoShutdown.notifyPeerMapUpdated(AWTAutoShutdown.Java:215)
at Sun.awt.AWTAutoShutdown.registerPeer(AWTAutoShutdown.Java:348)
at Sun.awt.SunToolkit.targetCreatedPeer(SunToolkit.Java:313)
at Sun.awt.X11.XToolkit.createFrame(XToolkit.Java:410)
at Java.awt.Frame.addNotify(Frame.Java:477)
at Java.awt.Window.show(Window.Java:1031)
at Java.awt.Component.show(Component.Java:1651)
at Java.awt.Component.setVisible(Component.Java:1603)
at Java.awt.Window.setVisible(Window.Java:1014)
at tool.BAT.main(BAT.Java:11)
そして時々、別の種類のエラーが発生しました:
Error occurred during initialization of VM
Java.lang.OutOfMemoryError: unable to create new native thread
そして、もう一度実行しようとすると、Javaがクラッシュしました:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x0000000000000000, pid=30388, tid=139776854689536
#
# JRE version: 7.0_07-b30
# Java VM: OpenJDK 64-Bit Server VM (23.2-b09 mixed mode linux-AMD64 compressed oops)
# Problematic frame:
# C 0x0000000000000000
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /home/mcmlxxxvi/workspace/bat/hs_err_pid30388.log
#
# If you would like to submit a bug report, please include
# instructions on how to reproduce the bug and visit:
# http://icedtea.classpath.org/bugzilla
#
top
は問題の原因を明らかにしました(仮想メモリの使用量に注意してください):
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30619 mcmlxxxv 20 0 3271m 390m 45m S 2.0 13.0 0:38.88 Java
30667 mcmlxxxv 20 0 2172m 35m 12m S 0.3 1.2 0:01.00 Java
30688 mcmlxxxv 20 0 2172m 35m 12m S 0.3 1.2 0:00.96 Java
30710 mcmlxxxv 20 0 2172m 35m 12m S 0.0 1.2 0:00.97 Java
これらはすべて、閉じられていなかった私のアプリケーションのインスタンスでした。インスタンスごとになぜそんなに多くの仮想メモリが割り当てられたのかはまだわかりません-おそらくそれに対するいくつかのオプションがあります。 (ところで、3GiBの物理メモリがあります)。
これが私のmain()メソッドです:
public static void main(String[] args) {
JFrame frame = new JFrame();
//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setVisible(true);
}
チュートリアルでコメント行を見て、何が起こるか見るためにそれを特に無効にしました。起こったのは、デフォルトでHIDE_ON_CLOSE
、フレームを閉じて破棄しませんでした。
setDefaultCloseOperation
をEXIT_ON_CLOSEに設定することが私にとっての解決策でした。しかし、これに関するより知識のある人々からの意見を見ることに興味があります。