【发布时间】:2016-08-29 14:06:31
【问题描述】:
所以今天在学习Java的时候,终于遇到了这个特别的错误。似乎这个错误非常普遍,试图从中恢复得到了不同的反应。一些人认为it is useful in certain scenarios 所以它是一个很好的“好消息”,some have used it in their projects,而其他人vehemently oppose the idea 发现这个错误,然后是很多 others are just as confused as me。
编辑:哦顺便说一句,这是我遇到的错误。我希望抓住这些错误,下次将增量器的值减少 1/10,直到发现另一个错误
(依此类推......直到我找到上限)
由于我在 Java 中迈出了第一步,找不到关于这个主题的任何具体内容,我想就这个特定的例子寻求你的帮助:
public class SpeedDemoClass {
static int iterations=0;
static int incrementor=10000000;
public static void main(String[] args) {
while(incrementor>1){
try{
iterations=iterations+incrementor;
iterator(iterations);
}
catch(Exception e){
System.out.println("So this is the limiting error: "+e);
iterations=iterations-incrementor;
incrementor=incrementor/10;
iterations=iterations+incrementor;
}
}
System.out.println("The upper limit of iterations is: "+iterations);
}
public static void iterator(int a){
long start_time= System.currentTimeMillis();
StringBuilder sbuild= new StringBuilder("JAVA");
for(int i=0;i<a;i++){
sbuild.append("JAVA");
}
System.out.println("Performing "+a+" append operations;"
+"process completed in :"
+(System.currentTimeMillis()-start_time)+"ms");
}
}
你试过编译吗?
当然,它不起作用
下面是我正在尝试做的简短描述!
我正在尝试执行以下操作:
- 初始化 incrementor=10000000 和 iterations=0 并将 incrementor=incrementor+iterations 的结果传递给 iterator()。
- 如果出现错误,程序应捕获它,然后将 iterations* 减少 **incrementor,然后将 incrementor 除以 10,然后再试一次李>
- 重复步骤 1 到 2,直到它开始工作。
- 目标是找到产生错误的 iterations 值,并在每次迭代后保持在该级别以下,直到找到 iterations 值的上限
(即当 incrementor 变为 0)
通过我自己的手动测试,我发现它的价值是 92,274,686。这就是神奇的数字。我不知道为什么会这样,也不知道它是否只对我自己的电脑有价值。这将是 如果有人可以发布一个可以吐出这个的修改过的代码,那就太棒了 结果。
【问题讨论】:
-
你有什么问题?
-
感谢您发布如此有条理的问题。
-
结构良好,是的,但最终不清楚实际问题是什么。
-
我希望通过 incrementor(X) 递增可能的迭代次数(I) 的值,直到出现错误。然后,当我发现错误时,我会将 X 的值更改为其值的 1/10 并重复该过程,直到再次出现错误,然后再捕获它并再次执行相同的操作。这一直重复,直到我有足够的 1/10 X 次达到 1,然后在下一个错误时,我达到 X=0;表示迭代结束。我相信,如果我这样做,我将能够找到 92,274,686。我还不知道如何使用 Java。我希望得到帮助:)
-
您可能会在这个相关问题中找到有用的信息:stackoverflow.com/questions/37335/…
标签: java out-of-memory