从java.lang.OutOfMemoryError中恢复

Sid*_*mal 5 java out-of-memory

所以今天在学习Java时,我终于遇到了这个特殊错误.似乎这个错误非常普遍,并试图从中恢复已经获得了混合反应.有些人认为它在某些情况下是有用的,因此它是一个很好的"知道",有些人在他们的项目中使用它,而另一些则强烈反对 捕获这个错误的想法,然后很多其他人就像我一样困惑.

编辑:哦顺便说一句,这是我遇到的错误.我希望捕获这些错误并将增量值的值减少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");
    }
}
Run Code Online (Sandbox Code Playgroud)

你有没有尝试编译它?

当然,它不起作用

这是我正在尝试做的简短描述!

我正在尝试执行以下操作:

  1. 初始化incrementor = 10000000并迭代 = 0并将incrementor = incrementor + iterations 的结果传递给iterator().
  2. 如果有错误,程序应该捕获它,然后通过**incrementor减少迭代*,然后将incrementor除以10,然后再次尝试
  3. 重复步骤1到2,直到它开始工作.
  4. 目标是找到迭代的值,它产生错误并在每次迭代后保持在该水平以下,直到找到迭代值的上限
    (即,当incrementor变为0时)

通过我自己的手动测试,我发现它的值为 92,274,686.这是神奇的数字.我不知道为什么会这样,以及它是否只是我自己的电脑的价值.如果有人可以发布可以吐出这个结果的修改过的代码,那将是非常棒的.