当我从Eclipse(Juno)运行它时,有没有人可以解释为什么这个代码抛出OOME但是当我从命令行运行它时工作正常?我在两种情况下都使用-Xmx256M。
static class Task implements Runnable {
byte[] buf = new byte[150000000];
@Override
public void run() {
}
}
public static void main(String[] args) throws Exception {
System.out.println(Runtime.getRuntime().maxMemory());
ExecutorService ex = Executors.newSingleThreadExecutor();
ex.submit(new Task()).get();
ex.submit(new Task()).get();
}
这是Eclipse输出
259522560
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at Test2$Task.<init>(Test2.java:7)
at Test2.main(Test2.java:17)
我在笔记本上运行它,无法确定它在其他PC上的表现。
答案 0 :(得分:1)
- 原始回复 - Eclipse以256M运行,但您是否编辑了应用程序的运行配置以便为启动的应用程序提供256aM?如果没有,它将使用默认堆运行。
- 更新问题后更新 -
我测试了下面的代码,它在日食和外面运行良好。
OOME是否在第一次运行时发生(例如,以下输出是什么?),以及更改分配位置是否会影响事物?:
public class Test {
public static class Task implements Runnable {
byte[] buf;
int id;
public Task(int i) {
id = i;
}
@Override
public void run() {
buf = new byte[150000000];
System.out.println("hi " + id);
}
}
public static void main(String[] args) throws Exception {
System.out.println(Runtime.getRuntime().maxMemory());
ExecutorService ex = Executors.newSingleThreadExecutor();
ex.submit(new Task(1)).get();
ex.submit(new Task(2)).get();
}
}