某所で大量のメモリを使うAppletを作ることになったので、Appletでどれくらいのメモリが使えるのかを試してみました。
テストアプリはシンプルに無限ループ内でじゃんじゃんメモリを確保していき、Out Of Memory が発生した時点での確保したメモリ容量を表示します。
public class MemTestApplet extends JApplet { private static final long serialVersionUID = 4741535794748911197L; private static final int KBYTE = 1024; private long memoryLimit = 0; public MemTestApplet() { super(); } public void init() { byte[] test = new byte[KBYTE]; ByteArrayOutputStream os = new ByteArrayOutputStream(); System.out.println("Applet Stress Test Begin"); try { while (true) { os.write(test); } } catch (OutOfMemoryError e) { memoryLimit = os.size(); System.out.println("Memory Limit=" + memoryLimit + "byte"); System.out.println( "Memory Limit=" + (memoryLimit / KBYTE) + "KB"); System.out.println( "Memory Limit=" + (memoryLimit / KBYTE / KBYTE) + "MB"); System.gc(); e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void paint(final Graphics g) { g.drawString( "Memory Limit=" + (memoryLimit / KBYTE / KBYTE) + "MB", 0, 20); } }
用意したHTMLは、
<html> <head><title>Applet Memory Test</title> </head> <body> <applet name="ChartApplet" codebase="./bin" code="com.snail.applet.MemTestApplet.class" width="320" height="240"> </applet> </body> </html>
どうやらデフォルト状態では、32MBまでしかメモリを確保できないようです
どうやら、Windows XPではApplet(JRE1.5)に割り当てるメモリを512MB以上にするとブラウザからAppletが起動できなくなるようです(JREエラーが起きる)。
Windows 2000では256MBがVMに割り当てられるメモリ容量の上限でした。
実行環境 | VMに割り当てられる最大メモリ容量(JRE起動引数) |
WinXP + IE6.0 + JRE1.5 | -Xmx512MB |
WinXP + Fire Fox 1.06 + JRE1.5 | -Xmx512MB |
Win2K + IE6.0 + JRE1.5 | -Xmx256MB |