某所で大量のメモリを使う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 |