当前位置: 首页 > 知识库问答 >
问题:

Java语言lang.OutOfMemoryError(超出GC开销限制)

酆阳煦
2023-03-14

当我尝试运行TestRun时,我遇到了以下错误。我试了很多,但找不到。帮帮我!我得到了内存不足错误Java堆。运行以下代码也需要更多的时间来运行,最后它显示错误,如下所示。如何使这段代码正确?调试这对我来说非常困难。线程“主”中的异常java.lang.OutOfMemoryError:Java堆空间。

package website;

import java.util.ArrayList;

import Combination.averageM;
import Combination.boatandstreamM;
import Combination.fractionsM;
import Combination.interestM;
import Combination.measurementM;
import Combination.numberM;
import Combination.percentageM;
import Combination.profitandlossM;
import Combination.simplificationM;
import Combination.timeanddistanceM;
import Combination.timeandwM;

public class ArrayOfSums {

    ArrayList<sums> als;
    String Q, A, scale, finalvalue;
    double fv;
    NewOptions pencil = new NewOptions();
    sums sumsObj;

    public ArrayList<sums> giveArrayOfSums(int x) {

        als = new ArrayList<sums>();
        int n = 0;
        switch (x) {

            case 1:
                simplificationM pen = new simplificationM();

                while (n <= 19) {

                    pen.simplificationM();
                    pencil.optionsCreator(pen.fv, pen.scale);
                    sumsObj = new sums(pen.Q, pen.A, pen.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4);
                    als.add(sumsObj);
                }
                break;

            case 2:
                numberM pen1 = new numberM();

                while (n <= 19) {

                    pen1.numberM();
                    pencil.optionsCreator(pen1.fv, pen1.scale);
                    sumsObj = new sums(pen1.Q, pen1.A, pen1.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4);
                    als.add(sumsObj);
                }
                break;

            case 3:
                percentageM pen2 = new percentageM();

                while (n <= 19) {

                    pen2.percentageM();
                    pencil.optionsCreator(pen2.fv, pen2.scale);
                    sumsObj = new sums(pen2.Q, pen2.A, pen2.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4);
                    als.add(sumsObj);
                }
                break;

            case 4:
                numberM pen3 = new numberM();

                while (n <= 19) {

                    pen3.numberM();
                    pencil.optionsCreator(pen3.fv, pen3.scale);
                    sumsObj = new sums(pen3.Q, pen3.A, pen3.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4);
                    als.add(sumsObj);
                }
                break;

            case 5:
                fractionsM pen4 = new fractionsM();

                while (n <= 19) {

                    pen4.fractionsM();
                    pencil.optionsCreator(pen4.fv, pen4.scale);
                    sumsObj = new sums(pen4.Q, pen4.A, pen4.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4);
                    als.add(sumsObj);
                }
                break;

            case 6:
                profitandlossM pen5 = new profitandlossM();

                while (n <= 19) {

                    pen5.profitandlossM();
                    pencil.optionsCreator(pen5.fv, pen5.scale);
                    sumsObj = new sums(pen5.Q, pen5.A, pen5.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4);
                    als.add(sumsObj);
                }
                break;

            case 7:
                averageM pen6 = new averageM();

                while (n <= 19) {

                    pen6.averageM();
                    pencil.optionsCreator(pen6.fv, pen6.scale);
                    sumsObj = new sums(pen6.Q, pen6.A, pen6.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4);
                    als.add(sumsObj);
                }
                break;

            case 8:
                timeandwM pen7 = new timeandwM();

                while (n <= 19) {

                    pen7.timeandwM();
                    pencil.optionsCreator(pen7.fv, pen7.scale);
                    sumsObj = new sums(pen7.Q, pen7.A, pen7.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4);
                    als.add(sumsObj);
                }
                break;

            case 9:
                timeanddistanceM pen8 = new timeanddistanceM();

                while (n <= 19) {

                    pen8.timeanddistanceM();
                    pencil.optionsCreator(pen8.fv, pen8.scale);
                    sumsObj = new sums(pen8.Q, pen8.A, pen8.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4);
                    als.add(sumsObj);
                }
                break;

            case 10:
                boatandstreamM pen9 = new boatandstreamM();

                while (n <= 19) {

                    pen9.boatandstreamM();
                    pencil.optionsCreator(pen9.fv, pen9.scale);
                    sumsObj = new sums(pen9.Q, pen9.A, pen9.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3, pencil.jRadioButton4);
                    als.add(sumsObj);
                }
                break;

            case 11:
                interestM pen11 = new interestM();

                while (n <= 19) {

                    pen11.interestM();
                    pencil.optionsCreator(pen11.fv, pen11.scale);
                    sumsObj = new sums(pen11.Q, pen11.A, pen11.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3,
                            pencil.jRadioButton4);
                    als.add(sumsObj);
                }
                break;

            case 12:
                measurementM pen12 = new measurementM();

                while (n <= 19) {

                    pen12.measurementM();
                    pencil.optionsCreator(pen12.fv, pen12.scale);
                    sumsObj = new sums(pen12.Q, pen12.A, pen12.finalvalue, pencil.jRadioButton1, pencil.jRadioButton2, pencil.jRadioButton3,
                            pencil.jRadioButton4);
                    als.add(sumsObj);
                }
                break;

        }

        return als;

    }

}

班级总和:

package website;

public class sums {
    public String Question, Answer, Finalvalue, P1, P2, P3, P4;
    public int choosenOption;

    public sums(String Q, String A, String finalvalue, String p1, String p2, String p3, String p4) {
        Question = Q;
        Answer = A;
        Finalvalue = finalvalue;
        P1 = p1;
        P2 = p2;
        P3 = p3;
        P4 = p4;

    }

    public void setChoosen(int n) {
        choosenOption = n;
    }

}

类测试运行:

package website;

import java.util.ArrayList;

public class TestRun {

    /**
     * @param args
     */
    public static void main(final String[] args) {
        ArrayOfSums SumsTable = new ArrayOfSums();
        //session.setAttribute("sumtin",SumsTable.giveArrayOfSums(8));

        ArrayList<sums> SumsSet = (ArrayList<sums>) SumsTable.giveArrayOfSums(8);
        sums gotSum = (sums) SumsSet.get(1);

        System.out.println(gotSum.Question);

    }
}

共有3个答案

弘兴言
2023-03-14

Java语言当Java虚拟机由于内存不足而无法分配对象,并且垃圾收集器无法提供更多内存时,会抛出lang.OutOfMemoryError。

为了解决这个问题,可以在jvm中增加以下参数:

  • Xms-最小堆大小

Xms选项设置初始和最小Java堆大小。Java堆(堆)是内存的一部分,在垃圾回收机制中,内存块被分配给对象并被释放。

  • Xmx-最大堆大小

此选项设置最大Java堆大小。Java堆(“堆”)是内存的一部分,内存块分配给对象,并在垃圾收集期间释放。根据您运行的操作系统的类型,可以为Java堆设置的最大值可能会有所不同。

有关更多信息,请访问http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html

隆选
2023-03-14

调试这对我来说非常困难。线程“main”java中出现异常。lang.OutOfMemoryError:Java堆空间。

这不是您可以调试的问题。您使用的内存超过了您的内存限制。没有一行代码可能会导致此问题。

相反,您需要使用探查器来确定内存的使用位置。我建议您尝试将最大内存量增加到主内存的一半以下,并附加一个探查器(VisualVM总比什么都没有好),然后查看是否保留了对象。

如果您使用商业分析器,这将运行得更好一点,并且更清楚问题出在哪里。我使用YourKit,您可以免费获得eval许可证。

我错过了开关箱(n)内的增量运算符。所以循环永远不会结束。

我会养成使用for循环的习惯,比如

for(int i = 0; i <= 19; i++)
商飞航
2023-03-14

出现此错误是因为JVM内存不足。您需要通过设置JVM参数来增加java堆大小<我认为问题可能在这里,

 while (n <= 19) {

                pen.  simplificationM ();
                pencil.optionsCreator(pen.fv, pen.scale);

                sumsObj = new sums(pen.Q, pen.A, pen.finalvalue 
                                  , pencil.jRadioButton1, pencil.jRadioButton2
                                  , pencil.jRadioButton3, pencil.jRadioButton4);
                als.add(sumsObj);
                n++;//added to increase value of n in each iteration
            }
            break;

在上面的代码中,您不会增加n的值。所以而(n

 类似资料:
  • 我试图用火花处理10GB的数据,它给了我这个错误, Java语言lang.OutOfMemoryError:超出GC开销限制 笔记本电脑配置为:4CPU,8个逻辑内核,8GB RAM 提交Spark作业时进行Spark配置。 在网上搜索了这个错误后,我有几个问题 如果回答,那将是一个很大的帮助。 1) Spark是内存计算引擎,用于处理10 gb的数据,系统应具有10 gb的RAM。Spark将1

  • 当我执行我的测试时,我得到了这个错误消息: 我知道什么是,但GC开销限制意味着什么?我怎样才能解决这个问题?

  • 当我运行我的8-puzzle程序时,我不断得到“超出GC开销限制”。我曾尝试向JVM添加更多内存,但没有任何帮助。 这是问题所在的方法: start是我从文件. txt中读取的字符串。它可以解决一些问题,但有些问题会产生此错误。

  • 我使用Spark\u apply在Spark中遇到GC开销限制超出错误。以下是我的规格: SparkyR v0.6.2 Spark v2.1.0 4个工人,8核和29G内存 闭包每次从Cassandra提取一行数据。总共大约有20万行。这个过程运行了大约一个半小时,然后给了我这个内存错误。 我试过spark。驾驶员内存本应增加堆大小,但它不起作用。 有什么想法吗?下面的用法

  • 这是我的java代码,我在其中使用Apache Spark sql从Hive查询数据。 当我运行此代码时,它抛出java.lang.OutOfMemoryError:超出GC开销限制。如何解决此问题或如何在Spark配置中增加内存。

  • 我目前正在使用jenkins创建一个性能框架,并执行jenkins的性能测试。我正在使用https://github.com/jmeter-maven-plugin/jmeter-maven-plugin这个插件。在这个性能框架中,单用户的健全性测试运行良好,并进行了200个用户的实际性能测试,在2分钟内收到了错误消息。lang.OutOfMemoryError:超出了GC开销限制。我在jenki